原本打算寫設計模式的,在週六日用了兩天的時間所有看了一遍,可是寫了一篇以後,發現,寫的沒有網上的好,感受你們可能看不懂,因此打算繼續寫併發編程html
設計模式,就給你們推薦一下菜鳥教程的吧,我看了一下,將的比較統一,都很不錯java
連接:https://www.runoob.com/design-pattern/design-pattern-tutorial.html編程
顯示鎖是jdk1.5以後提供的一種鎖設計模式
Lock提供了一種無條件的、可輪詢的、定時的以及可中斷的鎖獲取操做,全部加鎖和解鎖的方法都是顯示的。網絡
lock:加鎖併發
lockInterruptibly:中斷鎖spa
tryLock:嘗試獲取鎖,附帶超時重載線程
unlock:釋放鎖設計
newCondition:獲取一個Condition,Condition是一個用於線程之間通訊的一個類code
package org.dance.day4; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * lockDemo * @author ZYGisComputer */ public class LockDemo { private Lock lock = new ReentrantLock(); private int count; /** * 累加操做 */ public void increment(){ // 加鎖 lock.lock(); try { count++; }finally { // 釋放鎖 lock.unlock(); } } public synchronized void incrementSync(){ count++; // 可重入鎖演示 incrementSync(); } }
1:獲取鎖
2:寫try finally
3:在finally中釋放鎖
總結:獲取鎖完畢後,必定要在以後的代碼中,添加try finally並在finally塊中釋放鎖,由於防止代碼中拋出異常報錯,致使鎖沒法釋放
Lock Sync
使用方式 複雜 簡單
獲取鎖是否能夠被中斷 能夠 不能夠
獲取鎖是否能夠超時 能夠 不能夠
是否能夠嘗試獲取鎖 能夠 不能夠
是否可重入 能夠 能夠
是否能夠讀寫分離 能夠 不能夠
是不是阻塞的 不是 是
什麼是可重入鎖?可重入鎖就是支持一個線程對這個鎖進行屢次獲取加鎖,通常只有在遞歸一個加鎖的方法的時候或者調用多個加鎖的方法纔會用到可重入鎖,可重入鎖獲取了幾回,就要釋放幾回,而Java的Synchronized和Lock接口都是提供鎖的可重入的.
通常來講,若是不是,業務特殊要求鎖,須要能夠中斷,或者獲取超時,或者嘗試獲取,讀寫分離的,推薦直接使用Synchronized
做者:彼岸舞
時間:2020\11\02
內容關於:併發編程
本文來源於網絡,只作技術分享,一律不負任何責任