Java Executors.newSingleThreadExecutor()-如何查看队列中有多少任务
我在代码中使用Executors.newSingleThreadExecutor()。Java Executors.newSingleThreadExecutor()-如何查看队列中有多少任务,java,multithreading,Java,Multithreading,我在代码中使用Executors.newSingleThreadExecutor()。 我想监控队列中的任务数,以检查procesor是否没有消息过载。如何在当前时刻获得大量未完成的提交任务? 我期待这样的事情: ExecutorService executor = Executors.newSingleThreadExecutor(); executor.submit(new Runnable() {...}); executor.submit(new Runnable() {...}); e
我想监控队列中的任务数,以检查procesor是否没有消息过载。如何在当前时刻获得大量未完成的提交任务? 我期待这样的事情:
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
谢谢,不是这样吗
((ThreadPoolExecutor) executor).getQueue().size();
如果您想保证即使使用新版本的JVM,FlorianOver建议的代码也能工作,您可以这样做:(对于方法Executors.newSingleThreadExecutor()将不再返回ThreadPoolExecutor类型的实例的情况)
ThreadPoolExecutor executor=new ThreadPoolExecutor(1,1,0L,TimeUnit.millides,new LinkedBlockingQueue());
// ...
int queueSize=executor.getQueue().size();
我引述的是,在任何给定的时间都不会有多个任务处于活动状态。但是,您可以通过调用返回的Future
上的isDone()
来检查当前提交的任务是否已运行到完成状态。这里的“我想监视队列中的任务数,以检查procesor是否没有消息过载”,以及您是否要执行此操作?-1,错误。这将导致ClassCastException
作为执行器返回的ExecutorService
实现。newSingleThreadExecutor()
是一个FinalizableDelegatedExecutorService
而不是ThreadPoolExecutor
(自Java 6以来)。+1始终向接口编码。Executors
中的所有实用程序方法都返回接口类型ExecutorService
或ScheduledExecutorService
,因此Executors
的实现不能保证返回的内容将扩展到任何特定实现(即使只有一个公开的实现)。
ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
// ...
int queueSize = executor.getQueue().size();