有如下代码,想问下这种情况下会有线程安全问题吗,我回调方法里去赋值this.result1和this.result2,然后在最后去读者两个字段,读和写不是同一线程不用同步吗? public void newInit() throws ExecutionException, InterruptedException {
CompletableFuture cf1 = CompletableFuture.supplyAsync(() -> {
return 1L;
}).thenAccept(result -> {
this.result1 = result;
});
CompletableFuture cf2 = CompletableFuture.supplyAsync(() -> {
return 2L;
}).thenAccept(result -> {
this.result2 = result;
});
CompletableFuture.allOf(cf1, cf2).get();
System.out.println(this.result1)
}
2 回答
精慕HU
TA贡献1845条经验 获得超8个赞
首先因为现在的应用越来越复杂,越来越多模块多系统之间相互依赖,一个操作可能需要使用多个模块或者多个系统提供的多个服务来完成一个功能,如果每个服务顺序的执行,可能需要消耗很多时间,或者前端用户需要得到及时响应,不需要等待所有服务完成便可以返回部分结果,而且现在的计算机处理器性能越来越强大,多核处理器越来越普遍,核心数也越来越多,使用多线程可以更加充分利用硬件的资源,不论是什么原因异步编程应运而生。
12345678_0001
TA贡献1802条经验 获得超5个赞
CompletableFuture.allOf(cf1, cf2).get();
--- 这里已经包装thread1和thread2都执行完了,所以result1都写完了,后面再读就不需要同步了
添加回答
举报
0/150
提交
取消