Javaの待機スレッドとスリープスレッドの実装方法

Javaでは、スレッドの待機とスレッドのスリープには以下のような手段があります。

  1. スレッド待ち(Thread.wait()及びObject.wait()):wait()メソッドは、現在スレッドを待機状態にし、保持されていたロックを解除できます。wait()メソッドを使用するには、同期ブロックまたは同期メソッドで呼び出す必要があり、wait()メソッドを呼び出す前にオブジェクトのロックを取得する必要があります。スレッドは、待機状態のときに、他のスレッドによってnotify()またはnotifyAll()メソッドでウェイクアップできます。

下の例を御覧ください。

synchronized (obj) {
    // 线程等待
    obj.wait();
    // 执行其他操作
}
  1. スレッドスリープ(Thread.sleep()):スレッドを一定時間スリープさせ、ロックを解放せずに待機するメソッド。一定時間が到達するまで他スレッドからのウェイクアップの影響を受けず、この時間経過後に実行可能状態に戻る。

そのコードの例は次のとおりです。

// 线程睡眠
try {
    Thread.sleep(1000); // 休眠1秒
} catch (InterruptedException e) {
    e.printStackTrace();
}
// 执行其他操作

スレッド待機とスレッドスリープは両方ともスレッドのブロックを引き起こす可能性があるが、待機はロックを解放して待機キューに入ることで、スリープはロックを解放しない点で異なる。また、スレッド待機とスレッドスリープを使用する際には、割り込み例外の処理とウェイクアップ状況の処理に注意し、スレッドが適切に動作することを確認する必要がある。

bannerAds