Java內存模型與線程
- 作者:新網(wǎng)
- 來源:新網(wǎng)
- 瀏覽:100
- 2018-05-15 14:40:56
內存模型:說了這么多的內存模型,到底什么是內存模型呢?特定的操作協(xié)議下,對特定的內存或高速緩存進行讀寫訪問的過程抽象。
內存模型:說了這么多的內存模型,到底什么是內存模型呢?特定的操作協(xié)議下,對特定的內存或高速緩存進行讀寫訪問的過程抽象。
<
div> 它的作用是定義程序中各個共享的變量的訪問規(guī)則,即如何將變量寫入內存和從內存中取出變量。Java內存模型有主內存與工作內存之分,所有變量存在主內存中,線程則是擁有自己的工作內存,它是主內存的副本拷貝,線程只能讀寫工作內存。
8種原子操作
·lock(鎖定):作用于主內存的變量,它把一個變量標識為一條線程獨占的狀態(tài)。
unlock(解鎖):作用于主內存的變量,它把一個處于鎖定狀態(tài)的變量釋放出來,釋放后的變量才可以被其他線程鎖定。
read(讀取):作用于主內存的變量,它把一個變量的值從主內存?zhèn)鬏數(shù)骄€程的工作內存中,以便隨后的 load 動作使用。
load(載入):作用于工作內存的變量,它把 read 操作從主內存中得到的變量值放入工作內存的變量副本中。
use(使用):作用于工作內存的變量,它把工作內存中一個變量的值傳遞給執(zhí)行引擎,每當
虛擬機遇到一個需要使用到變量的值的字節(jié)碼指令時將會執(zhí)行這個操作。
·assign(賦值):作用于工作內存的變量,它把一個從執(zhí)行引擎接收到的值賦給工作內存的變量,每當虛擬機遇到一個給變量賦值的字節(jié)碼指令時執(zhí)行這個操作。
store(存儲):作用于工作內存的變量,它把工作內存中一個變量的值傳送到主內存中,以便隨后的 write 操作使用。
write(寫入):作用于主內存的變量,它把 store 操作從工作內存中得到的變量的值放入主內存的變量中。
volatile變量的特殊規(guī)則
volatile的特性是保證此變量對所有線程的可見性,即當變量的值修改后,其他線程可以立即知道發(fā)生的變化。普通變量則是修改完值后,需要寫回主內存,然后其他線程再從主內存讀取該數(shù)據(jù)。volatile還可以通過內存屏障來禁止指令的重排序。綜合來講它的讀操作和普通變量差不多,寫操作慢一點。
long和double變量的特殊規(guī)則
8種操作一般都是原子性的,但是對于64位的數(shù)據(jù),內存模型允許將沒有被volatile修飾的64位數(shù)據(jù)的讀寫操作劃分為兩次32位的操作進行---->非原子協(xié)定但一般我們不需要將long和double聲明為volatile。
以上就是小編的分享,各位可以在下面留言交流。