目錄

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)操作線程:

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

如上圖,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í)使用。

 

網(wǎng)友評(píng)論