ReentrantLock
重入鎖,在須要進行代碼同步部分上加鎖,可是必定要記得解鎖。
類型:公平鎖(隊列方式進行排隊)、非公平鎖(按照cpu的分配),非公平鎖性能要比公平鎖性能高,默認爲非公平鎖。
- finally內較好,由於解鎖鎖程序可能會發生一些意想不到的錯誤,致使沒法正常解鎖
package dmeo9;import javax.security.auth.login.FailedLoginException;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * Created by liudan on 2017/8/4. */public class DemoLock { private Lock lock = new ReentrantLock(false); public void m1(){ try { lock.lock(); System.err.println(Thread.currentThread().getName()+":線程,進入m1"); Thread.sleep(3000); System.err.println(Thread.currentThread().getName()+":線程,繼續執行 m1"); Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); }finally { lock.unlock();//解鎖的動做寫在 } } public void m2(){ try { lock.lock(); System.err.println(Thread.currentThread().getName()+":線程,進入m2"); Thread.sleep(3000); System.err.println(Thread.currentThread().getName()+":線程,繼續執行 m2"); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); }finally { lock.unlock(); } } public static void main(String[] atgs){ final DemoLock demoLock = new DemoLock(); Thread t1 = new Thread(new Runnable() { @Override public void run() { demoLock.m1(); demoLock.m2(); } },"t_00001"); t1.start(); }} 輸出:t_00001:線程,進入m1 t_00001:線程,繼續執行 m1 t_00001:線程,進入m2 t_00001:線程,繼續執行 m2