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