[英]ExecutorService with number of running tasks
我想獲得提交給執行程序服務但尚未完成的任務數(即當前正在運行/活動或排隊)。 Executor服務沒有內置的方法。
((ThreadPoolExecutor) executorService).getActiveCount()
這“返回正在執行任務的大致線程數”。
這是維持一個易變的計數器的有效替代方案嗎? 為什么它是近似的? 我真的會更好地維持一個櫃台嗎? 為什么執行程序服務沒有內置方法呢?
讓我們來看看這個任務:只有你可以告訴你確切的數字,如果你停止系統,計數,返回,啟動系統。 否則:在計數期間,線程可能會開始和結束,因此數字是近似值。
請參閱OpenJDK8中的實現:
1812 public int More ...getActiveCount() {
1813 final ReentrantLock mainLock = this.mainLock;
1814 mainLock.lock();
1815 try {
1816 int n = 0;
1817 for (Worker w : workers)
1818 if (w.isLocked())
1819 ++n;
1820 return n;
1821 } finally {
1822 mainLock.unlock();
1823 }
1824 }
實施是直截了當的,但它就像計算螞蟻而不殺死它們:它們會在你數數的時候來去匆匆。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.