第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

`Future<?>` 任務完成后檢查字段是否安全?

`Future<?>` 任務完成后檢查字段是否安全?

開心每一天1111 2023-10-13 15:22:04
Future<?>成功調用后檢查由 a 中執(zhí)行的任務修改的字段是否安全future.get()?(是否保證完成設置值,并且我看到新值?)我會在調用future.get().或者我應該只使用返回值future.get()而不應該期望它像這樣工作?例子:class MyData {    private int a;    public void setA(int a) { this.a = a; }    public int getA() { return a; }}public class MainClass {    public static void main(String[] args) {        final Executor executor = Executors.newFixedThreadPool(15);        final List<MyData> objects = Arrays.asList(new MyData(), new MyData() /* ... */);        final Future<Void> future1 = CompletableFuture.supplyAsync(() -> { objects.get(0).setA(1); return null; }, executor);        final Future<Void> future2 = CompletableFuture.supplyAsync(() -> { objects.get(1).setA(2); return null; }, executor);        /* ... */        a.get();        b.get();        /* ... */        // Is it safe here to check the `a` field of the objects?        assert objects.get(0).getA() == 1;        assert objects.get(1).getA() == 2;    }}
查看完整描述

2 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

Future狀態(tài)的 javadoc

內存一致性影響:異步計算所采取的操作發(fā)生Future.get()在另一個線程中相應操作之后 。

由于get僅在相應計算完成時返回(setA調用 和),因此該計算通過調用 后與任何代碼的發(fā)生之前return關系可見。您對 的調用發(fā)生在 后,因此它將看到之前發(fā)生的的結果。getgetAFuture#getsetA


查看完整回答
反對 回復 2023-10-13
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

正如文檔所說Future#get()

如有必要,等待計算完成,然后檢索其結果。

因此,在調用該方法后進行斷言是完全安全的,Future.get()因為屆時這些值將被解析。


查看完整回答
反對 回復 2023-10-13
  • 2 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號