【问题标题】:Java FixedThreadPool not working with set pool size?Java FixedThreadPool 不适用于设置池大小?
【发布时间】:2012-07-22 00:30:29
【问题描述】:

我正在为工作线程使用 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,po​​ol_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);

【问题讨论】:

  • 该日志消息是如何生成的?
  • 你能举一个重现这个的代码示例吗?
  • 你能提供一个 SSCCE 来重现这个吗,因为鉴于 newFixedThreadPool 和 ThreadPoolExecutor 的源代码,我看不出这是怎么可能的。

标签: java threadpool threadpoolexecutor


【解决方案1】:

根据文档ThreadPoolExecutor.getActiveCount(),它只给出了一个近似值,考虑到获得准确值所需的开销,这是相当公平的。因此,当您看到“28”时,它实际上可能不是 28 个线程同时运行,但在函数调用期间它计数为 28 个线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 2016-03-21
    相关资源
    最近更新 更多