Java-多執行緒-執行緒安全-Lock鎖
阿新 • • 發佈:2021-01-19
Java-多執行緒-執行緒安全-Lock鎖
- JDK1.5後新增新一代的執行緒同步方式:Lock鎖
- 與採用synchronized相比,lock可提供多種鎖方案,更靈活
- synchronized是Java中的關鍵字,這個關鍵字的識別是靠JVM來識別完成的呀。是虛擬機器級別的。
- 但是Lock鎖是API級別的,提供了相應的介面和對應的實現類,這個方式更靈活,表現出來的效能優於之前的方式。
- 使用注意:
- 開啟鎖就必須記得釋放鎖,不然其他執行緒就一直是阻塞狀態
- 建議使用try-catch-finally的方式,保證不管程式中間執行情況,最後一定會把鎖釋放
- 示例:
public class BuyTicketThread implements Runnable{ private int ticketNum = 10; Lock lock = new ReentrantLock(); @Override public void run() { for (int i = 0; i < 100; i++) { // 開啟鎖 lock.lock(); try { if(ticketNum>0){ System.out.println("我在" + Thread.currentThread().getName() + "買到了西藏到成都的第" + ticketNum-- + "張機票"); } }catch (Exception ex){ ex.printStackTrace(); }finally { // 釋放鎖 lock.unlock(); } } } } class Test { // 這是main方法,實現程式主要邏輯 public static void main(String[] args) { // 定義一個執行緒物件, 可以只建立一個執行緒物件 BuyTicketThread btt = new BuyTicketThread(); // 視窗1 Thread t1 = new Thread(btt, "視窗1"); // 視窗2 Thread t2 = new Thread(btt, "視窗2"); // 視窗3 Thread t3 = new Thread(btt, "視窗3"); // 啟動執行緒 t1.start(); t2.start(); t3.start(); } }