簡體   English   中英

Java FixedThreadPool不能使用set pool size?

[英]Java FixedThreadPool not working with set pool size?

我正在使用FixedThreadPool作為工作線程。 這是我創建它的方式:

ThreadPoolExecutor producerThreadPool = (ThreadPoolExecutor) Executors.newFixedThreadPool(25);

所以我將它的大小設置為25,我假設任何時候最多只能有25個活動線程? (如果我錯了糾正我)。

如果線程池中有空閑線程,那么我的主線程一直在嘗試一次提交30個工作線程:

if(producerThreadPool.getActiveCount() <= 25)

但是當我調試它時,我得到了這個日志:

Mon Jul 23 14:04:42 EDT 2012: {"queued_count":"0","active_count":"28","scheduled_tasks":"28","core_pool_size":"1000","pool_size":"29"}
Mon Jul 23 14:04:43 EDT 2012: {"queued_count":"0","active_count":"3","scheduled_tasks":"33","core_pool_size":"1000","pool_size":"34"}
Mon Jul 23 14:04:44 EDT 2012: {"queued_count":"0","active_count":"0","scheduled_tasks":"60","core_pool_size":"1000","pool_size":"60"}
Mon Jul 23 14:04:45 EDT 2012: {"queued_count":"0","active_count":"0","scheduled_tasks":"90","core_pool_size":"1000","pool_size":"90"}
...

隊列總是空的,core_pool_size仍然是1000,並且pool_size一直在增加到1000,但我認為core_pool_size應該是25並且應該有排隊的任務?

我做錯了什么或誤解了嗎?

任何幫助將不勝感激,謝謝!

這是我生成日志的方式:

HashMap<String, String> log = new HashMap<String, String>();
log.put("core_pool_size", Integer.toString(producerThreadPool.getCorePoolSize()));
log.put("scheduled_tasks", Long.toString(producerThreadPool.getTaskCount()));
log.put("pool_size", Integer.toString(producerThreadPool.getPoolSize()));
log.put("active_count", Integer.toString(producerThreadPool.getActiveCount()));
log.put("queued_count", Integer.toString(producerThreadPool.getQueue().size()));
String gson_str = gson.toJson(log);

根據文檔ThreadPoolExecutor.getActiveCount() ,它只給出一個近似計數,考慮到獲得准確值所需的開銷,這是非常公平的。 所以當你看到'28'時,實際上可能並不是28個並發運行的線程,但是在函數調用期間,它計算了28個線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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