请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

cpu密集型和io密集型线程池疑问

public class ThreadPoolUtils {

private int CPUCOUNT = Runtime.getRuntime().availableProcessors();

private ThreadPoolExecutor cpuExecutor = new ThreadPoolExecutor(CPUCOUNT, CPUCOUNT,
        30, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>(), sThreadFactory);

private ThreadPoolExecutor iOExecutor = new ThreadPoolExecutor(64, 64,
        30, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>(), sThreadFactory);
        ....

这段代码,我的理解是应该把 cpuExecutor iOExecutor,设置为static的。用的时候根据不同任务类型分别拿到cpuExecutor iOExecutor执行。
但是如果设置成静态就是我们工具类中有两种类型的threadPool,但是这两个都是都是我这个应用中的线程数呀:比如我用iOExecutor时,cpuExecutor中也有线程呀,这不也是一种浪费吗?所以,请问老师我的理解对不对?这中情况如何处理?

正在回答 回答被采纳积分+3

1回答

随风绽放 2024-03-08 11:09:55

同学你好,你可以理解成是浪费,但也是合理的浪费,比如 ArrayList 创建的时候直接构造的是长度为 10 的数组,如果你只需要存 1 个元素,那看起来是有些浪费,但为什么说合理呢?因为你后面还可能会继续加元素,再次加的时候就不需要重新申请了。回到这个问题里,通过区分 IO 与 CPU 密集型线程池,我们在减少应用整体线程数的情况下同时也提升了整体任务的执行效率,因此这个如果依然说是浪费的话也是合理的浪费。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信