簡體   English   中英

具有正在運行的任務數的ExecutorService

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM