是否有任何方法可以在給定的時間點知道ExecutorService
有多少可運行的等待執行。例如,假設循環調用execute方法的速度快於runnable可以完成並且有多餘的累積,那麼是否有計算累計可運行的計數?如何查找等待執行的可運行的數量
ExecutorService es = Executors.newFixedThreadPool(50);
while (test) {
es.execute(new MyRunnable());
}
是否有任何方法可以在給定的時間點知道ExecutorService
有多少可運行的等待執行。例如,假設循環調用execute方法的速度快於runnable可以完成並且有多餘的累積,那麼是否有計算累計可運行的計數?如何查找等待執行的可運行的數量
ExecutorService es = Executors.newFixedThreadPool(50);
while (test) {
es.execute(new MyRunnable());
}
有沒有辦法知道在當時許多可運行如何等待由ExecutorService的執行指定的點。
是的。而不是使用Executors...
來電,你應該實例化你自己的ThreadPoolExecutor
。下面是什麼Executors.newFixedThreadPool(50)
將返回:
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(50, 50,
0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
一旦你有了ThreadPoolExecutor
,它有一個number of getter methods,讓你在泳池數據。優秀作業的數量應該是:
threadPool.getQueue().getSize();
也可從ThreadPoolExecutor
是:
getActiveCount()
getCompletedTaskCount()
getCorePoolSize()
getLargestPoolSize()
getMaximumPoolSize()
getPoolSize()
getTaskCount()
如果要限制在隊列中的作業數量,這樣你就不會得到遙遙領先太多,你應該使用有界BlockingQueue
和RejectedExecutionHandler
。在這裏看到我的答案:Process Large File for HTTP Calls in Java
您可以使用ThreadPoolExecutor
實現並調用toString()
方法。
返回標識此池的字符串及其狀態,包括運行狀態和估計的工作人員和任務計數的指示。
更多here
有在此實現更多的方法,讓你不同類型的計數。
您可以使用以下兩種方法:
public long getTaskCount()
返回曾經被安排執行任務的大致總數。由於任務和線程的狀態可能在計算過程中動態地改變,返回的值只是一個近似值。
public long getCompletedTaskCount()
返回已完成執行的任務的近似總數。由於任務和線程的狀態可能在計算過程中動態地改變,所以返回的值只是一個近似值,但是在連續的調用中不會降低。
乾杯!
BlockingQueue and RejectedExecutionHandler ..精彩!! –