2017-09-02 103 views
2

所以我使用executorservice來創建一個線程池。如何獲取執行程序服務中隊列中的任務數量?

ExecutorService executor = Executors.newSingleThreadExecutor(); 

我試圖訪問該線程池的隊列中的任務數。我發現沒有辦法去解決這個問題。 我知道有一些方法可以在threadpoolexecutor中獲得隊列大小,但是我怎麼用executorservice對象來做到這一點。

就像我說的,我可以得到隊列的信息,如果我創建了這樣的

ThreadPoolExecutor tpExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>()); 

我知道我可以使用tpExecutor.queue.size(),以獲得在隊列中的任務數量的ThreadPoolExecutor線程池。 但目前我已經使用Executor Service聲明瞭我的線程池。我怎樣才能做到這一點? 如果人們可以編寫代碼並演示,那將是可觀的。

+0

'Executors.newFixedThreadPool(nThreads)'哪裏'nThreads = 1'? – nullpointer

+0

我能從中得到什麼?我如何獲得線程池隊列中的任務數量?請詳細說明。 – africandrogba

+1

假設'newSingleThreadExecutor()'實際上返回了一個'ThreadPoolExector'類型,您可以只投出對象並調用https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ ThreadPoolExecutor.html#getActiveCount--不知道爲什麼這很重要。 – markspace

回答

0

您可以將其轉換爲ThreadPoolExecutor。

ThreadPoolExecutor ex =(ThreadPoolExecutor)executor; ex.getQueue()。size();

相關問題