English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

java synchronizedロードロック-リエントリ可能なスレッドの詳細な解説およびサンプルコード

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 などのロックメカニズムは、スレッドが再入可能です。

読んでいただきありがとうございます。皆様のサポートに感謝します!

おすすめ