Lov*_*eow 11 java multithreading
我有一个服务器,它有多个使用java executorService实现的工作线程(即一个线程池)
我的问题是我无法每秒登录,如果线程池中没有空闲线程,则等待处理的作业长度.
注意:记录不是我的问题,但我希望能够看到工作线程正在等待处理多少个任务/作业,无论如何都要查看执行程序服务中的等待队列(而不是线程池)的长度?
我不知道如何实现这个东西.
Tag*_*eev 17
该ThreadPoolExecutor构造函数接受一个BlockingQueue参数,它是Queue用来存储等待处理的作业执行.您可以使用getQueue()方法请求此队列,然后检查队列的大小:
System.out.println("Number of waiting jobs: "+executor.getQueue().size());
Run Code Online (Sandbox Code Playgroud)
请注意,此方法在ExecutorService界面中不可用,因此最好ThreadPoolExecutor明确构造而不是使用Executors.newFixedThreadPool和朋友:
ThreadPoolExecutor executor = new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
Run Code Online (Sandbox Code Playgroud)
虽然Executors.newFixedThreadPool在OpenJDK/OracleJDK中也是如此,但未指定,因此在将来的Java版本或替代JDK实现中(ThreadPoolExecutor)Executors.newFixedThreadPool(nThreads)可能会导致使用ClassCastException.
| 归档时间: |
|
| 查看次数: |
9601 次 |
| 最近记录: |