并行执行(Callable和Future)一定比串行执行效率高吗?

本文通过实例探讨了并行与串行执行方法在不同情况下的效率表现。介绍了如何使用Callable和Future进行并行任务的设计,并指出当任务耗时较短时,串行执行更为高效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一个程序里顺序调用了两个不相关的方法A和B,A耗时100毫秒,B耗时80毫秒,所以总共耗时180毫秒。

main(){

methodA;

methodB;

}

因为方法A和B不相关,所以我们可以将程序改造成并行执行,使用Callable和Future配合实现(只讨论需要A和B的返回值的情况)。

main(){

ExecutorService executor = Executors.newFixedThreadPool(2);
Future<JSONObject> future1 = executor.submit(new Callable<JSONObject>() {
                @Override
                public JSONObject call() throws Exception {
                    return methodA;
                }
            });
Future<Integer> future2 = executor.submit(new Callable<Integer>() {
                @Override
                public Integer call() throws Exception {
                    return methodB
                }
            });
executor.shutdown();

JSONObject r1 = future1.get();
int r2 = future2.get();

}

因为是并行执行,所以理论上,执行时间总共是100毫秒(取两个方法中耗时最大的)+异步线程自身的消耗时间

经过试验,异步线程自身的消耗时间大约是200毫秒,这样并行执行的总时间就是300毫秒,大于串行执行的180毫秒。

可见并行执行不一定比串行执行效率高。对于耗时很少的方法来说,选择顺序执行既简单又高效。

当至少有两个方法的耗时都超过200毫秒时,采用并行执行的优势才显露出来。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值