1. 程式人生 > 實用技巧 >Java-多執行緒-執行緒安全-Lock鎖

Java-多執行緒-執行緒安全-Lock鎖

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();

    }
}