synchronized、volatile和lock

特性 synchronized volatile
原子性 true false
可見性 true true
是否阻塞線程 true false
使用級別 變量、方法、類 變量
用途 鎖定當前變量,只有當前線程能夠訪問該變量,其餘線程被阻塞住 告訴jvm當前變量在寄存器(工做內存)中的值是不肯定的,須要從主存中讀取
使用範圍 a、對變量的寫操做不依賴於當前值。b、該變量沒有包含在具備其餘變量的不變式中。

synchronized和lock區別
鎖機制:synchronized、Lock、Conditionjvm

特性 synchronized ReentrantLock
是否須要手動釋放 false true
等待中的線程是否能夠中斷等待 false true
是否能夠主動得到鎖 false true(投票等方式)
是否支持定時 false true
其餘 synchronized是在JVM層面上實現的(語言級別)JVM會自動釋放鎖定 lock是經過代碼實現的,要保證鎖定必定會被釋放,就必須將unLock()放到finally{}中
相關文章
相關標籤/搜索