2013-09-24 31 views
1

是否有任何方法可以在給定的時間點知道ExecutorService有多少可運行的等待執行。例如,假設循環調用execute方法的速度快於runnable可以完成並且有多餘的累積,那麼是否有計算累計可運行的計數?如何查找等待執行的可運行的數量

ExecutorService es = Executors.newFixedThreadPool(50); 

while (test) { 
    es.execute(new MyRunnable()); 
} 

回答

4

有沒有辦法知道在當時許多可運行如何等待由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()

如果要限制在隊列中的作業數量,這樣你就不會得到遙遙領先太多,你應該使用有界BlockingQueueRejectedExecutionHandler。在這裏看到我的答案:Process Large File for HTTP Calls in Java

+1

BlockingQueue and RejectedExecutionHandler ..精彩!! –

0

您可以使用ThreadPoolExecutor實現並調用toString()方法。

返回標識此池的字符串及其狀態,包括運行狀態和估計的工作人員和任務計數的指示。

更多here

有在此實現更多的方法,讓你不同類型的計數。

您可以使用以下兩種方法:

public long getTaskCount() 

返回曾經被安排執行任務的大致總數。由於任務和線程的狀態可能在計算過程中動態地改變,返回的值只是一個近似值。

public long getCompletedTaskCount() 

返回已完成執行的任務的近似總數。由於任務和線程的狀態可能在計算過程中動態地改變,所以返回的值只是一個近似值,但是在連續的調用中不會降低。

乾杯!