java 鎖白話

1、鎖

  一、可見性:

    定義:數據對全部線程可見java

    緣由:cpu操做數據時會把數據讀取到內存中去,能夠理解爲值作了備份,可是備份數據和原始數據在後續操做中不必定一致緩存

    實現:java使用volite關鍵字來實現,是最先的緩存一致性解決方案安全

    原理:藉助與cpu緩存一致的解決性方案,操做系統抽象其爲lock操做spa

  二、原子性:

    定義:操做拆分爲多個步驟後,在執行過程當中中間變量被其它修改,致使操做和預期的不一致操作系統

  三、隔離區(臨界區)

    定義:要實現多個線程對變量操做的安全性,就要實現操做的串行化線程

    實現:java使用synchronized來實現對象

    原理:對象在內存的頭部有一個標識內存

    悲觀鎖:其餘線程操做時,加鎖,悲觀的認爲鎖不會立刻釋放,阻塞等待喚醒【算了。停在這等吧】it

        阻塞態到運行態會很耗時鐘,若是預期不會立刻喚醒,可使用悲觀鎖變量

    樂觀鎖:其餘線程操做時,加鎖,樂觀的認爲鎖會立刻釋放,一直在輪詢標誌,查看鎖釋放狀態【一直在問鎖釋放了沒?】

        一直運行於運行態,短時喚醒能夠考慮,預期鎖釋放時間較長會更耗時鐘

相關文章
相關標籤/搜索