重入鎖ReentrantLock常用方法(三)

2021-08-20 11:59:29 字數 2036 閱讀 1931

1. isheldbycurrentthread()

查詢當前執行緒是否保持鎖定。

islocked()

查詢是否存在任意執行緒保持此鎖定。

public class reentrantlockmethodtest7  finally 

}public static void main(string args)

};thread thread = new thread(runnable);

thread.start();}}

執行結果,

isheldbycurrentthread,在使用重入鎖進行鎖定後,當前執行緒保持鎖定狀態。

islocked,使用重入鎖進行鎖定後,存在乙個執行緒保持此鎖定。

如果當前執行緒未被中斷,則獲取鎖定;如果已中斷,則丟擲異常(interruptedexception)

public class reentrantlockmethodtest8 

} catch (interruptedexception e) finally

}public static void main(string args)

};// a執行緒正常執行

thread threada = new thread(runnable);

threada.setname("a");

threada.start();

thread threadb = new thread(runnable);

threadb.setname("b");

threadb.start();

// b執行緒標記中斷

threadb.interrupt();}}

執行結果

嘗試獲取鎖定,如果鎖定沒有被別的執行緒保持,則獲取鎖定,即成功獲取返回true,否則返回false(鎖定已被別的執行緒獲取)

trylock(long timeout, timeunit unit)

嘗試獲取鎖定,如果鎖定沒有被別的執行緒保持,則獲取鎖定,即成功獲取返回true,如果沒有獲取鎖定,則等待指定的時間,要是在指定時間內獲取鎖定,返回true,否則返回false。

public class reentrantlockmethodtest9 else

// 測試trylock(long time, timeunit unit)

// tryelse

// } catch (interruptedexception e) finally

}public static void main(string args)

};thread threada = new thread(runnable);

thread threadb = new thread(runnable);

threada.setname("a");

threadb.setname("b");

threada.start();

threadb.start();}}

執行結果,a獲取鎖返回true,b沒有獲得鎖返回false

將測試trylock(long time, timeunit unit)的**注釋去掉並注釋掉trylock()方法

執行結果,a獲取鎖定,執行完後解鎖,b執行緒在指定的時間內獲取了鎖。

AQS之可重入鎖ReentrantLock原理

一 經典故事 村子裡面,有一口井水。水質很好,村民們都想打井裡的水。村長這時就制定了規則 井邊安排乙個看井人,維護打水的秩序。打水時,以家庭為單位,哪個家庭任何人先到井邊,就可以先打水,而且如果乙個家庭佔到了打水權,其家人這時候過來打水不用排隊。而那些沒有搶占到打水權的人,乙個乙個挨著在井邊排成一隊...

可重入鎖 不可重入鎖

可重入鎖指的是可重複可遞迴呼叫的鎖,在外層使用鎖之後,在內層仍然可以使用,並且不發生死鎖 前提是同乙個物件或者類 note reentrantlock和synchronized都是可重入鎖 1 public class testlock 78 public synchronized void tes...

可重入鎖和不可重入鎖

當乙個執行緒獲得當前例項的鎖lock,並且進入了方法a,該執行緒在方法a沒有釋放該鎖的時候,是否可以再次進入使用該鎖的方法b?不可重入鎖 在方法a釋放鎖之前,不可以再次進入方法b 可重入鎖 在方法a釋放該鎖之前可以再次進入方法b 如reentrantlock和synchronized 不可重入鎖的實...