我试图理解为 Java 5 的 ThreadPoolExecutor 指定单独的核心和最大池大小的要点。我的理解是,线程数只有在队列已满时才会增加,这似乎有点晚了(至少对于较大的队列)。
难道我不乐意为任务分配更多数量的线程,在这种情况下我可能只是增加核心池大小;或者我不太愿意这样做,在这种情况下我应该有更大的队列?单独的核心和最大池大小在什么情况下有用?
有一个关于这个的讨论here http://comments.gmane.org/gmane.comp.java.jsr.166-concurrency/7109.
该池旨在在 corePoolSize 的正常负载下工作(以
除非使用预启动,否则它会逐渐增加)。当过载时
发生条件(定义为有更多待处理/处理中的
任务而不是工人)我们使用队列作为缓冲区 - 与
预计近期将恢复正常工作量
未来。如果我们担心过度过载,那么我们可以使用
有界队列,这表示“如果队列已满,则添加更多工作人员
最多 maxPoolSize”。如果我们使用无界队列,我们会说我们不这样做
预期(或者不关心)过度过载。
目的是平衡处理预期工作负载的能力,
即使在瞬时过载的情况下,也无需过多的线程
创建并且没有太多线程搅动(即
创建-工作-模具-创建)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)