可重入鎖是什麼?

可重入鎖,指的就是在一段同步代碼塊中,同一個鎖只能同時被一個線程所持有,所以當一個線程執行一段同步代碼塊的時候,從a方法進入到b方法,會自動獲取鎖,而不會被其他的線程所搶佔。

    private static ReentrantLock lock = new ReentrantLock();
    public static void main(String[] args) {
        new Thread(() -> {
            a();
        }, "我是線程1").start();
        new Thread(() -> {
            b();
        },"我是線程2").start();
    }

    private static void a(){
        lock.lock();  // 獲取鎖
        System.out.println(Thread.currentThread().getName()+"a.....");
        try {
            Thread.sleep(2000);
            b();     //調用b方法
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        lock.unlock(); // 釋放鎖
    }

    private static void b(){
        lock.lock(); //獲取鎖
        System.out.println(Thread.currentThread().getName()+"b.....");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        lock.unlock(); //釋放鎖
    }

執行結果爲:


我是線程1a.....
我是線程1b.....
我是線程2b.....

Process finished with exit code 0

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章