目錄
1.synchronized同步鎖
2.ReentrantLock重入鎖
3.ReadWriteLock讀寫(xiě)鎖
4.StampedLock戳鎖(目前沒(méi)找到合適的名字,先這么叫吧...)
5.總結(jié)
=======正文分割線==========
為了更好的支持并發(fā)程序,JDK內(nèi)部提供了多種鎖。本文總結(jié)4種鎖。
1.synchronized同步鎖
使用:
synchronized本質(zhì)上就2種鎖:
1.鎖同步代碼塊
2.鎖方法
可用object.wait() object.notify()來(lái)操作線程等待喚醒
原理:synchronized細(xì)節(jié)的描述傳送門:jdk源碼剖析三:鎖Synchronized
性能和建議:JDK6之后,在并發(fā)量不是特別大的情況下,性能中等且穩(wěn)定。建議新手使用。
2.ReentrantLock可重入鎖(Lock接口)
使用:ReentrantLock是Lock接口的實(shí)現(xiàn)類。Lock接口的核心方法是lock(),unlock(),tryLock()。可用Condition來(lái)操作線程:
如上圖,await()和object.wait()類似,singal()和object.notify()類似,singalAll()和object.notifyAll()類似
原理:核心類AbstractQueuedSynchronizer,通過(guò)構(gòu)造一個(gè)基于阻塞的CLH隊(duì)列容納所有的阻塞線程,而對(duì)該隊(duì)列的操作均通過(guò)Lock-Free(CAS)操作,但對(duì)已經(jīng)獲得鎖的線程而言,ReentrantLock實(shí)現(xiàn)了偏向鎖的功能。
性能和建議:性能中等,建議需要手動(dòng)操作線程時(shí)使用。