ReentrantLock和synchronized的區別隨筆

轉自:http://wsmajunfeng.iteye.com/blog/1492316 程序員


可重入鎖 ReentrantLock 的含義是: 當某個線程獲取某個鎖後,在未釋放鎖的狀況下,第二次再訪問該鎖鎖定的另外一代碼塊時,能夠從新進入該塊。 
  
什麼狀況下能夠使用 ReentrantLock : 
1 ,先看看 synchronized 的一些限制: 
     1.1 :沒法中斷正在等候獲取一個鎖的線程 
     1.2 :沒法經過投票獲得一個鎖 
     1.3 :釋放鎖的操做只能與得到鎖所在的代碼塊中進行,沒法在別的代碼塊中釋放鎖 
2 , ReentrantLock 沒有以上的這些限制,且必須是手工釋放鎖。多線程

 

 

主要相同點:Lock能完成synchronized所實現的全部功能
主要不一樣點:Lock有比synchronized更精確的線程語義和更好的性能,當許多線程都在爭用同一個鎖時,使用 ReentrantLock 的整體開支一般要比 synchronized 少得多。 synchronized會自動釋放鎖,而Lock必定要求程序員手工釋放,而且必須在finally從句中釋放。ide

相關文章
相關標籤/搜索