ホームページ  >  記事  >  Java  >  Java でのスレッドの待機とウェイクアップの概要 (コード)

Java でのスレッドの待機とウェイクアップの概要 (コード)

不言
不言転載
2018-10-08 15:48:372940ブラウズ

この記事では、Java でのスレッドの待機と起動に関する概要 (コード) を紹介します。必要な方は参考にしていただければ幸いです。

class ThreadA extends Thread{

    public ThreadA(String name) {
        super(name);
    }

    public void run() {
        synchronized (this) {
            System.out.println(Thread.currentThread().getName()+" call notify()");
            notify();
        }
    }
}
public class WaitTest {
    public static void main(String[] args) {
        ThreadA t1 = new ThreadA("t1");
        synchronized(t1) {
            try {
                // 启动“线程t1”
                System.out.println(Thread.currentThread().getName()+" start t1");
                t1.start();

                // 主线程等待t1通过notify()唤醒。
                System.out.println(Thread.currentThread().getName()+" wait()");
                t1.wait();

                System.out.println(Thread.currentThread().getName()+" continue");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

出力結果: main start t1 -> main wait() -> main continue

実際には、t1.start() が呼び出されたとき、t1 は準備完了状態になりますが、メイン メソッドでは、t1.wait() のときに、t1 がメイン スレッドによってロックされ、現在のスレッドを待機させると、実際にはメイン メソッドが実行されます。 t1 をロックした後、t1 スレッドが実行され、t1 call Notice() を出力し、メインスレッドを起動して、最後に終了します。

wait() との違いについて説明します。 sleep() の共通点は、スレッドをスリープさせることですが、wait() はオブジェクト同期ロックを解放しますが、sleep() は t1 が終了するまで実行されません。

うわー

以上がJava でのスレッドの待機とウェイクアップの概要 (コード)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。