在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java/ [Java]這個(gè)boolean用volatile修飾有什么意義?

[Java]這個(gè)boolean用volatile修飾有什么意義?

用和不用的區(qū)別在哪兒?

圖片描述

回答
編輯回答
熊出沒

volatile 的作用就是把放在線程棧上的變量立刻同步到主內(nèi)存中,這里涉及到Java內(nèi)存模型的知識(shí)。

每一個(gè)運(yùn)行在Java虛擬機(jī)里的線程都擁有自己的線程棧。這個(gè)線程棧包含了這個(gè)線程調(diào)用的方法當(dāng)前執(zhí)行點(diǎn)相關(guān)的信息。一個(gè)線程僅能訪問(wèn)自己的線程棧。一個(gè)線程創(chuàng)建的本地變量對(duì)其它線程不可見,僅自己可見。即使兩個(gè)線程執(zhí)行同樣的代碼,這兩個(gè)線程任然在在自己的線程棧中的代碼來(lái)創(chuàng)建本地變量。因此,每個(gè)線程擁有每個(gè)本地變量的獨(dú)有版本。

所有原始類型的本地變量都存放在線程棧上,因此對(duì)其它線程不可見。一個(gè)線程可能向另一個(gè)線程傳遞一個(gè)原始類型變量的拷貝,但是它不能共享這個(gè)原始類型變量自身。

多個(gè)線程間變量的同步都是先同步到主內(nèi)存中,然后主內(nèi)存再同步到其他線程的變量副本上,但無(wú)法保證同步是立刻執(zhí)行的,加volatile之后會(huì)立刻同步。

在本文中的作用就是當(dāng)一個(gè)線程修改了shutdownRequested之后,其他線程獲取再次獲取shutdownRequested的值就是最新的,也就是達(dá)到了立刻停止doWork。

2017年6月8日 07:28
編輯回答
熊出沒

看看 volatile 的原理 https://segmentfault.com/a/11...

2018年1月12日 05:16