Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Executors.newSingleThreadExecutor()-如何查看队列中有多少任务_Java_Multithreading - Fatal编程技术网

Java 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

我在代码中使用Executors.newSingleThreadExecutor()。
我想监控队列中的任务数,以检查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();