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 不可重入鎖的實...