请稍等 ...
×

采纳答案成功!

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

线程池与for的比较

老师在课上说,当需要大量计算时,使用线程池会效率会更高,可我发现使用for循环计算累加值,耗时会少很多。这是为什么?
输出:
使用线程池耗时:6454
for耗时:84

public class LongAccumulatorDemo {

public static void main(String[] args) {
    threadPool();
    forLoop();
}

public static void threadPool() {
    LongAccumulator longAccumulator = new LongAccumulator((x, y) -> x + y, 0);
    ExecutorService service = Executors.newFixedThreadPool(8);
    long s = System.currentTimeMillis();
    IntStream.range(1, 10000000).forEach(i -> service.submit(() -> longAccumulator.accumulate(i)));
    long e = System.currentTimeMillis();
    service.shutdown();
    while (!service.isTerminated()) {

    }

    System.out.println("使用线程池耗时:" + (e - s));
}

public static void forLoop() {
    LongAccumulator longAccumulator = new LongAccumulator((x, y) -> x + y, 0);
    long s = System.currentTimeMillis();
    for (int i = 0; i < 10000000; i++) {
        longAccumulator.accumulate(i);
    }

    long e = System.currentTimeMillis();

    System.out.println("for耗时:" + (e - s));
}

}

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

1回答

悟空 2021-05-05 22:13:43

因为你这种简单加法,

LongAccumulator内部已经优化了,所以看不出线程池的优势。
你试试比如查询数据库,会发现线程池速度明显比for循环快。
0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号