English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
java synchronizedロードロック-スレッド再入可能
インスタンスコード:
public class ReGetLock implements Runnable { @Override public void run() { get(); } public synchronized void get() { System.out.println(Thread.currentThread().getId()); set(); } public synchronized void set() { System.out.println(Thread.currentThread().getId()); } public static void main(String[] args) { ReGetLock rgl = new ReGetLock(); new Thread(rgl).start(); } }
実行中のスレッドがsetメソッドに入れることができるかどうかは、63;
thread rglがgetメソッドを最初に呼び出し、ReGetLockオブジェクトのロックを取得した場合、thread rglがsynchronizedキーワードでマークされたsetメソッドに入ろうとすると、ブロックされ、待ち続けますか?63;
実際にはそうではありません。JAVAでは、あるスレッドが既に保持しているロックを取得しようとする場合、そのリクエストは成功します。それ以外の場合、死锁が発生します。
したがって、synchronized などのロックメカニズムは、スレッドが再入可能です。
読んでいただきありがとうございます。皆様のサポートに感謝します!