亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java CompletableFuture線程安全問題

Java CompletableFuture線程安全問題

一只萌萌小番薯 2018-07-17 17:26:58
有如下代碼,想問下這種情況下會有線程安全問題嗎,我回調方法里去賦值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個贊

首先因為現在的應用越來越復雜,越來越多模塊多系統之間相互依賴,一個操作可能需要使用多個模塊或者多個系統提供的多個服務來完成一個功能,如果每個服務順序的執行,可能需要消耗很多時間,或者前端用戶需要得到及時響應,不需要等待所有服務完成便可以返回部分結果,而且現在的計算機處理器性能越來越強大,多核處理器越來越普遍,核心數也越來越多,使用多線程可以更加充分利用硬件的資源,不論是什么原因異步編程應運而生。

查看完整回答
反對 回復 2018-07-25
?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

CompletableFuture.allOf(cf1, cf2).get();
--- 這里已經包裝thread1和thread2都執行完了,所以result1都寫完了,后面再讀就不需要同步了

查看完整回答
反對 回復 2018-07-25
  • 2 回答
  • 0 關注
  • 1228 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號