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

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

我們真的需要在本地復制 this.myVolatile 來執(zhí)行 Java 8 中的同步

我們真的需要在本地復制 this.myVolatile 來執(zhí)行 Java 8 中的同步

Helenr 2023-03-17 17:07:45
我們從以下方面更改現(xiàn)有代碼是否有任何好處:class MyClass {    volatile Object myVariable;    Object myMethod() {        if (myVariable == null) {            synchronized(this) {                if (myVariable == null) {                    myVariable = this.getNewValue();                }            }        }        return myVariable;    }}到class MyClass {    volatile Object myVariable;    Object myMethod() {        Object tmp = this.myVariable;        if (tmp == null) {            synchronized(this) {                tmp = this.myVariable;                if (tmp == null) {                    this.myVariable = tmp = this.getNewValue();                }            }           }        return tmp;    }}我不明白在使用之前在本地復制 this.myVariable 有什么意義,而且我認為使用“this”不是一個好習慣。對于每個類變量。
查看完整描述

1 回答

?
慕雪6442864

TA貢獻1812條經(jīng)驗 獲得超5個贊

復制到局部變量更高效、更正確。

更高效:假設在一般情況下,myVariable是非空的。在第一個版本中,您對 執(zhí)行兩次讀取myVariable,一次檢查 null,一次返回值。在第二個版本中,您執(zhí)行一次讀取myVariable和兩次讀取tmp(局部變量訪問,這是微不足道的)。使用 volatile 的全部意義在于強大的內(nèi)存保證,而這些保證意味著兩次讀取對一次讀取的性能影響很大。

更正確:假設這myVariable是某種需要定期刷新的“緩存”。即有一個后臺線程定期設置,myVariable以便null在下次讀取時重新加載。在第一個版本中,您myVariable. 第一次讀取可能返回非null,然后“緩存刷新”邏輯運行并設置myVariablenull。第二次讀?。ǚ祷刂担┤缓蠓祷?code>null!在第二個版本中,始終tmp是您測試的值(當然假設永遠不會返回)。nullgetNewValue()null

注意使用“這個”。是此代碼中的一種風格選擇,與正確性或性能問題無關。

這在很大程度上只是擴展了https://en.wikipedia.org/wiki/Double-checked_locking#Usage_in_Java中所述的內(nèi)容。


查看完整回答
反對 回復 2023-03-17
  • 1 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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