??在java內(nèi)存模型中,happens-before應(yīng)該理解為:前一個(gè)操作的結(jié)果,可以被后續(xù)的操作獲取,即內(nèi)存可見性。
          ??為了解決多線程的內(nèi)存可見性問題,就提出了happens-before原則,讓線程之間遵守這些原則,同時(shí)對編譯器的優(yōu)化也進(jìn)行了一定的約束。
          ??以下是原則內(nèi)容:

          1、程序次序規(guī)則

          ??在一個(gè)線程內(nèi),一段代碼的執(zhí)行結(jié)果是有序的。依然會有指令重排,但是不論怎么重排序,結(jié)果都是按照代碼順序生成的不會變。

          2、管程鎖定規(guī)則

          ??無論在單線程環(huán)境還是多線程環(huán)境,對于同一個(gè)鎖來說,一個(gè)線程對這個(gè)鎖解鎖之后,另一個(gè)線程獲取了這個(gè)鎖,則它能看到前一個(gè)線程的操作結(jié)果。

          3、volatile變量規(guī)則

          ??如果一個(gè)線程先去寫一個(gè)volatile變量,然后一個(gè)線程去讀這個(gè)變量,那么這個(gè)寫操作的結(jié)果一定對讀的這個(gè)線程可見。

          4、線程啟動規(guī)則

          ??在主線程A執(zhí)行過程中,啟動子線程B,那么線程A在啟動子線程B之前對共享變量的修改結(jié)果對線程B可見。

          5、線程終止規(guī)則

          ??在主線程A執(zhí)行過程中,子線程B終止,那么線程B在終止之前對共享變量的修改結(jié)果在線程A中可見。

          6、線程中斷規(guī)則

          ??對線程interrupt()方法的調(diào)用先行發(fā)生于被中斷線程代碼檢測到中斷事件的發(fā)生,可以通過Thread.interrupted()檢測到是否發(fā)生中斷。

          7、傳遞性規(guī)則

          ??就是happens-before原則具有傳遞性,即A happens-before B , B happens-before C,那么A
          happens-before C

          8、對象終結(jié)規(guī)則

          ??就是一個(gè)對象的初始化的完成,也就是構(gòu)造函數(shù)執(zhí)行的結(jié)束一定 happens-before它的finalize()方法

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                欧美成人精品三级又大又粗 | 大黑鸡巴操 | 欧美淫少妇 | 黄网站在线观看 | 国产成人无码一区二区在线观看 |