Получение статуса FinalizableDelegatedExecutorService

Я использую этот код, чтобы получить ExecutorService в java:

this.exec = Executors.newSingleThreadExecutor();

Теперь я хотел бы знать, сколько заданий он обработал, сколько стоит в очереди (самое главное!), и вообще всю информацию, которую я смог получить. Но у обычного ExecutorService этой информации нет. Но, согласно ответу на этот вопрос, я может привести к типу ThreadPoolExecutor, потому что это то, что он возвращает. Звучит просто... но есть одна проблема. Моя машина не возвращает ThreadPoolExecutor!

Вместо этого мне дается java.util.concurrent.Executors$FinalizableDelegatedExecutorService, что при попытке привести к этому невозможно, потому что класс не виден.

Итак, как я могу узнать статус моего ExecutorService?

Если вам очень любопытно и вы хотите узнать, для чего я использую свой ExecutorService (если это имеет значение), прочтите этот вопрос, который я задавал ранее. Это в основном для операторов SQL.


person Simon Forsberg    schedule 12.12.2012    source источник


Ответы (1)


Опция 1

Вы можете создать свой собственный ThreadPoolExecutor — это то, что делает newFixedThreadPool:

ExecutorService executor = new ThreadPoolExecutor(nThreads, nThreads,
                                  0L, TimeUnit.MILLISECONDS,
                                  new LinkedBlockingQueue<Runnable>());

Затем вы можете сохранить ссылку на очередь, чтобы увидеть, насколько она заполнена. Вы даже можете перейти на модифицированную версию, которая ведет счетчик количества полученных заданий.

Вариант 2

Вы можете использовать an ExecutorCompletionService, который помочь вам узнать, когда задача завершена - вы можете подсчитать, сколько заданий вы отправили / сколько выполнили.

person assylias    schedule 12.12.2012