synchronized 與wait() 和notify() notifyAll() 方法相結合能夠實現等待 通知
ReetrantLock也能夠實現一樣的功能 須要藉助condition對象,一個lock對象裏面能夠建立多個condition(對象監視器),能夠選擇性的進行線程通知,
notify() 和notifyall() 方法被通知是由jvm隨機選擇的,condition的使用須要在lock裏面。數據結構
reetranreadwritelock 可重入讀寫鎖
多個讀之間不互斥,讀鎖與寫鎖互斥, 寫鎖與寫鎖互斥
爲什麼使用讀寫鎖?
若是有不少線程從一個數據結構或者一個公共變量讀取數據,而不多的線程修改數據,那麼就用讀寫鎖。
分別獲得讀鎖和寫鎖:
ReentrantReadWriteLock rrwl=new ReentrantReadWriteLock();
ReadLock readL = rrwl.readLock();
WriteLock writeL = rrwl.writeLock();多線程
synchronized在發生異常時,可以自動釋放鎖,因此不會發生死鎖狀況;而Lock必須在finally中主動unlock鎖,不然就會出現死鎖。jvm
參考:https://blog.csdn.net/u012100371/article/details/75270644spa