特性 | 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{}中 |