在上篇博客(【死磕Java并發(fā)】—–深入分析volatile的實現(xiàn)原理)LZ提到過由于存在線程本地內(nèi)存和主內(nèi)存的原因,再加上重排序,會導(dǎo)致多線程環(huán)境下存在可見性的問題。那么我們正確使用同步、鎖的情況下,線程A修改了變量a何時對線程B可見?

我們無法就所有場景來規(guī)定某個線程修改的變量何時對其他線程可見,但是我們可以指定某些規(guī)則,這規(guī)則就是happens-before,從JDK 5 開始,JMM就使用happens-before的概念來闡述多線程之間的內(nèi)存可見性。

在JMM中,如果一個操作執(zhí)行的結(jié)果需要對另一個操作可見,那么這兩個操作之間必須存在happens-before關(guān)系。

happens-before原則非常重要,它是判斷數(shù)據(jù)是否存在競爭、線程是否安全的主要依據(jù),依靠這個原則,我們解決在并發(fā)環(huán)境下兩操作之間是否可能存在沖突的所有問題。下面我們就一個簡單的例子稍微了解下happens-before ;

  • 延伸閱讀

    學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式

    我想了解如何學(xué)習(xí)

    姓名:
    手機:
    留言: