摘要:以下原則是指令重排序不可違背的程序順序性原則一個(gè)線程內(nèi)保證語(yǔ)意的串行性原則變量的寫,先發(fā)生于讀,這保證了變量的可見性傳遞性先于,先于,那么必然先于線程的方法先于它的每一個(gè)動(dòng)作線程的所有操作先于線程的終結(jié)鎖規(guī)則解鎖必然發(fā)生在隨后的加鎖前線程的
以下原則是指令重排序不可違背的:
1.程序順序性原則:一個(gè)線程內(nèi)保證語(yǔ)意的串行性
2.volatile原則:volatile變量的寫,先發(fā)生于讀,這保證了volatile變量的可見性
3.傳遞性:A先于B,B先于C,那么A必然先于C
4.線程的start()方法先于它的每一個(gè)動(dòng)作
5.線程的所有操作先于線程的終結(jié)(Thread.join)
6.鎖規(guī)則:解鎖必然發(fā)生在隨后的加鎖前
7.線程的中斷先于被中斷線程的代碼
8.對(duì)象的構(gòu)造函數(shù)執(zhí)行,結(jié)束先于finalize()方法
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74704.html
摘要:順序一致性內(nèi)存模型有兩大特性一個(gè)線程中所有操作必須按照程序的順序執(zhí)行。這里的同步包括對(duì)常用同步原語(yǔ)的正確使用通過以下程序說(shuō)明與順序一致性兩種內(nèi)存模型的對(duì)比順序一致性模型中所有操作完全按程序的順序串行執(zhí)行。 java內(nèi)存模型 java內(nèi)存模型基礎(chǔ) happen-before模型 JSR-133使用happen-before的概念來(lái)闡述操作之間的內(nèi)存可見性。在JMM中,如果一個(gè)操作執(zhí)行的結(jié)...
摘要:這個(gè)規(guī)則比較好理解,無(wú)論是在單線程環(huán)境還是多線程環(huán)境,一個(gè)鎖處于被鎖定狀態(tài),那么必須先執(zhí)行操作后面才能進(jìn)行操作。線程啟動(dòng)規(guī)則獨(dú)享的方法先行于此線程的每一個(gè)動(dòng)作。 1. 指令重排序 關(guān)于指令重排序的概念,比較復(fù)雜,不好理解。我們從一個(gè)例子分析: public class SimpleHappenBefore { /** 這是一個(gè)驗(yàn)證結(jié)果的變量 */ private st...
摘要:舉個(gè)例子,在多線程不使用環(huán)境中,每個(gè)線程會(huì)從主存中復(fù)制變量到緩存以提高性能。保證了變量的可見性關(guān)鍵字解決了變量的可見性問題。在多線程同時(shí)共享變量的情形下,關(guān)鍵字已不足以保證程序的并發(fā)性。 volatile 關(guān)鍵字能把 Java 變量標(biāo)記成被存儲(chǔ)到主存中。這表示每一次讀取 volatile 變量都會(huì)訪問計(jì)算機(jī)主存,而不是 CPU 緩存。每一次對(duì) volatile 變量的寫操作不僅會(huì)寫到 ...
摘要:一言以蔽之,被修飾的變量能夠保證每個(gè)線程能夠獲取該變量的最新值,從而避免出現(xiàn)數(shù)據(jù)臟讀的現(xiàn)象。為了實(shí)現(xiàn)內(nèi)存語(yǔ)義時(shí),編譯器在生成字節(jié)碼時(shí),會(huì)在指令序列中插入內(nèi)存屏障來(lái)禁止特定類型的處理器重排序。volatile原理volatile簡(jiǎn)介Java內(nèi)存模型告訴我們,各個(gè)線程會(huì)將共享變量從主內(nèi)存中拷貝到工作內(nèi)存,然后執(zhí)行引擎會(huì)基于工作內(nèi)存中的數(shù)據(jù)進(jìn)行操作處理。 線程在工作內(nèi)存進(jìn)行操作后何時(shí)會(huì)寫到主內(nèi)存中...
摘要:一言以蔽之,被修飾的變量能夠保證每個(gè)線程能夠獲取該變量的最新值,從而避免出現(xiàn)數(shù)據(jù)臟讀的現(xiàn)象。為了實(shí)現(xiàn)內(nèi)存語(yǔ)義時(shí),編譯器在生成字節(jié)碼時(shí),會(huì)在指令序列中插入內(nèi)存屏障來(lái)禁止特定類型的處理器重排序。volatile原理volatile簡(jiǎn)介Java內(nèi)存模型告訴我們,各個(gè)線程會(huì)將共享變量從主內(nèi)存中拷貝到工作內(nèi)存,然后執(zhí)行引擎會(huì)基于工作內(nèi)存中的數(shù)據(jù)進(jìn)行操作處理。 線程在工作內(nèi)存進(jìn)行操作后何時(shí)會(huì)寫到主內(nèi)存中...
閱讀 2917·2021-11-24 09:38
閱讀 3524·2021-11-23 09:51
閱讀 998·2021-09-09 11:52
閱讀 4045·2021-08-11 11:18
閱讀 1123·2019-08-30 14:05
閱讀 3238·2019-08-30 11:23
閱讀 1776·2019-08-29 17:02
閱讀 1138·2019-08-26 13:49