3 回答

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
這里有兩件事:
您正在使用實(shí)例變量age并創(chuàng)建10個(gè)MyTh類(lèi)實(shí)例,因此每個(gè)實(shí)例將擁有自己的副本,并且不會(huì)干擾彼此的操作。因此,根據(jù)@tanyehzheng的建議,您必須將其設(shè)置為靜態(tài),以便可以在所有10個(gè)實(shí)例之間共享。
您的問(wèn)題是,如果我們使用static,volatile將產(chǎn)生什么變化:
static僅聲明該副本將在所有實(shí)例之間共享,并且在多個(gè)線(xiàn)程嘗試更新/訪(fǎng)問(wèn)它的情況下,它不保證內(nèi)存可見(jiàn)性。
另一方面,volatile將保證內(nèi)存可見(jiàn)性,即,如果對(duì)該變量進(jìn)行了任何寫(xiě)操作,則所有后續(xù)讀取都將看到最新值(happens-before關(guān)系)。如果僅使用靜態(tài),則不可能實(shí)現(xiàn),因?yàn)镃PU內(nèi)核可能會(huì)緩存該值或?qū)⑵浯鎯?chǔ)在寄存器中。
添加回答
舉報(bào)