Есть более прямой путь:
ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newSingleThreadExecutor();
// add jobs
// ...
int size = executor.getQueue().size();
Хотя вы можете не использовать удобные методы создания Executor, а создавать непосредственно исполнителя, чтобы избавиться от приведения и, таким образом, быть уверенным, что исполнителем всегда будет ThreadPoolExecutor
, даже если реализация Executors.newSingleThreadExecutor
изменится однажды.
ThreadPoolExecutor executor = new ThreadPoolExecutor( 1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>() );
Это напрямую скопировано из Executors.newSingleThreadExecutor
в JDK 1.6. LinkedBlockingQueue
, который передается конструктору, на самом деле является тем самым объектом, который вы получите от getQueue
.