課程
/后端開發(fā)
/Java
/細說Java多線程之內(nèi)存可見性
共享變量和volatile變量區(qū)別
2018-08-12
源自:細說Java多線程之內(nèi)存可見性 4-1
正在回答
共享變量是對于多線程而言的,多個線程訪問同一個變量,需要先把他從主內(nèi)存拷貝到自己的工作內(nèi)存中,讀寫的操作都是在工作內(nèi)存與主內(nèi)存之間進行的,工作內(nèi)存與工作內(nèi)存之間無法交互。volatile是為了保證線程A對于共享變量的修改,對其他線程B線程C是立即可見的。對于這一點,volatile符合兩個規(guī)則:1.線程A在修改共享變量后將其同步到主內(nèi)存中 2.線程BC在使用這個共享變量前,先從主內(nèi)存刷新得到最新的值。所以很神奇,volatile變量在使用時總是能拿到最新的值。
共享變量是在多線程操作的情況下,對某一個變量都有進行操作,該變量存儲在主存中,但是在多線程的工作內(nèi)存中都有一個副本,所以該變量是共享的,即為共享變量。 volatile變量是被該關(guān)鍵字修飾的變量。在單線程中也可以用來修飾變量,但是沒有意義。用在多線程中,是為了保證被其修飾的變量對于多線程來說都是內(nèi)存可見的。 在多線程中,volatile用來修飾共享變量,實現(xiàn)共享變量的可見性。
我理解的是其實這個兩種類型的變量在主內(nèi)存中是一樣的,只是在多線程的情況下,volatile修飾變量在線程操作前,會執(zhí)行store和load方法,這樣把主內(nèi)存中的變量同步到了工作內(nèi)存中。我自己的理解,不知道對不對。
舉報
用兩種方式實現(xiàn)內(nèi)存可見性,代領(lǐng)大家深層次學(xué)習Java中的內(nèi)存
2 回答論靜態(tài)變量與 volatile和synchronized的區(qū)別
3 回答為什么共享變量的可見性一定是private
1 回答加入有5個線程,某個變量在其中三個線程中有用到。這個變量算不算共享變量呢?
1 回答為什么兩個volatile變量在不變式中就會使得volatile線程不安全?
2 回答java多線程中共享變量是不是一定要private修飾?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2020-05-25
共享變量是對于多線程而言的,多個線程訪問同一個變量,需要先把他從主內(nèi)存拷貝到自己的工作內(nèi)存中,讀寫的操作都是在工作內(nèi)存與主內(nèi)存之間進行的,工作內(nèi)存與工作內(nèi)存之間無法交互。
volatile是為了保證線程A對于共享變量的修改,對其他線程B線程C是立即可見的。對于這一點,volatile符合兩個規(guī)則:1.線程A在修改共享變量后將其同步到主內(nèi)存中 2.線程BC在使用這個共享變量前,先從主內(nèi)存刷新得到最新的值。所以很神奇,volatile變量在使用時總是能拿到最新的值。
2018-09-17
共享變量是在多線程操作的情況下,對某一個變量都有進行操作,該變量存儲在主存中,但是在多線程的工作內(nèi)存中都有一個副本,所以該變量是共享的,即為共享變量。
volatile變量是被該關(guān)鍵字修飾的變量。在單線程中也可以用來修飾變量,但是沒有意義。用在多線程中,是為了保證被其修飾的變量對于多線程來說都是內(nèi)存可見的。
在多線程中,volatile用來修飾共享變量,實現(xiàn)共享變量的可見性。
2018-08-12
我理解的是其實這個兩種類型的變量在主內(nèi)存中是一樣的,只是在多線程的情況下,volatile修飾變量在線程操作前,會執(zhí)行store和load方法,這樣把主內(nèi)存中的變量同步到了工作內(nèi)存中。我自己的理解,不知道對不對。