鍍金池/ 問答/Java  Linux  網(wǎng)絡(luò)安全/ ThreadLocal和volatile的關(guān)系

ThreadLocal和volatile的關(guān)系

對(duì)于不加任何保護(hù)措施的多線程,其中一個(gè)線程中修改了某個(gè)數(shù)據(jù),什么時(shí)候提交給主內(nèi)存是不確定的,其他的線程使用的值不一定是最新的。
而在volatile修飾的情況下,會(huì)保證在修改后馬上提交給主內(nèi)存;
那么 ThreadLocal能否簡單的理解為每個(gè)線程在工作內(nèi)存的變量永遠(yuǎn)不提交給主內(nèi)存

回答
編輯回答
萌吟

ThreadLocal是當(dāng)前線程可見,不存在線程間通信的問題。

而volatile可以在線程間共享變量的同時(shí)保證可見性,以便線程間可以成功合作。

兩個(gè)應(yīng)用場(chǎng)景差別還挺大的。。。

2017年5月31日 11:00
編輯回答
薄荷綠

完成沒關(guān)系的兩件事啊, 你也可以把volatile變量放到ThreadLocal里啊,只是ThreadLocal原則上僅供當(dāng)前線程使用,沒有必要這么做而已.
如果你有什么別的確定的需求,把代碼放上來看看...

2017年5月19日 05:51
編輯回答
夕顏

簡單點(diǎn)說,volatile保證了線程總是看到最新的值,threadlocal是一個(gè)線程一份,兩個(gè)根本沒關(guān)系。

2018年4月17日 15:14