高併發(13)-顯式鎖與內置鎖
前言
上篇文章講解了什原子的操作類,今天就講講併發中的顯式鎖與內置鎖。
什麼是顯式鎖與內置鎖
多線程中,JDK提供了內置鎖(synchronized)和顯式鎖(ReentrantLock)兩種鎖。
顯式鎖與內置鎖的區別
1. 可中斷申請
synchronized若是其他線程持有鎖,新的線程獲取鎖就會被掛起,等待鎖的釋放,這個過程是無法中斷的
顯式鎖則提供了可以中斷這個申請
2. 嘗試型申請
先是鎖提供能嘗試獲取鎖的方法,如果未獲取到,則會返回false, 否則返回true.
內置鎖則沒有提供這個功能,只要使用鎖,沒有獲取之前就不會中斷線程。
3. 鎖的釋放
synchronized是隻要代碼執行到同步代碼快之外,就會釋放鎖。
顯示鎖則必須調用釋放鎖的方法纔可以釋放,需要自己處理,通常在finally中釋放鎖
4. 公平鎖
內置鎖採用了不公平鎖機制。
顯示鎖可以執行是否使用公平鎖。