executor . newsinglethreadexecutor() -如何查看队列中有多少任务



我在代码中使用executors . newsinglethreadeexecutor()。我想监视队列中的任务数量,以检查处理器是否被消息过载。我如何获得当前未完成的提交任务的数量?我希望是这样的:

ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(new Runnable() {...});
executor.submit(new Runnable() {...});
executor.submit(new Runnable() {...});
// do something and get 3
...
// do something and get 2
...
// do something and get 1

谢谢

如果您想保证即使使用新版本的JVM, FlorianOver建议的代码也可以工作,您可以这样做:(对于方法Executors.newSingleThreadExecutor()将不再返回ThreadPoolExecutor类型的实例的情况)

ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
// ...
int queueSize = executor.getQueue().size();

不是这样吗?

((ThreadPoolExecutor) executor).getQueue().size();

最新更新