并發(fā)十:內(nèi)置鎖、顯式鎖使用總結(jié)

1、與synchronized相比ReentrantLock擁有非阻塞的獲取鎖、響應(yīng)中斷、超時機(jī)制、支持公平性設(shè)置等特性,這些特性是在這兩種鎖進(jìn)行選擇時的依據(jù),而不是性能,JDK6之后內(nèi)置鎖引入了基于CAS的偏向鎖、輕量級鎖,以及JVM中的鎖消除、鎖粗化等優(yōu)化手段,synchronized的性能不再是詬病。

2、ReentrantLock也會出現(xiàn)死鎖,出現(xiàn)死鎖的原因大都在于鎖未釋放,所以unlock一定要放在 finally中。

3、不管哪一種鎖都會帶來一定的性能損耗,使用鎖時要盡量減少持有鎖的時間,即避免在臨界區(qū)內(nèi)進(jìn)行耗時計算。

3.1:盡量減少鎖的作用域范圍,即臨界區(qū)內(nèi)的代碼越短越好(lock...unlock之間)。

3.2:能使用共享鎖時盡量避免使用獨占鎖,如ReadWriteLock就比ReentrantLock的吞吐量高。

3.3:必要時進(jìn)行分拆鎖和分離鎖,如ConcurrentHashMap的實現(xiàn)中,內(nèi)部的數(shù)組被分成16段,每段單獨加鎖,使得每把鎖的請求時間縮短,能支持更高的吞吐量,最好的情況下可以支持16個線程同時寫入。

碼字不易,轉(zhuǎn)載請保留原文連接http://www.lxweimin.com/p/be9298b272e7

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容