2012-01-11 9 views
2

生きているが、実行可能ではない実行されていないどちらも、スレッドのための3つの状態があります: - wait()とjoin()の両方を実行すると、実行スレッドが「待機」状態になりますか?

  • スリーピング

    1. は、スレッドがスリープ()メソッドを実行すると

    を待っ

  • をブロックされ、その引数で指定された時間(たとえば、数ミリ秒間)、実行状態からスリープ状態になります。

    スレッドは、同期されたメソッドまたはブロックのために他のスレッドによって取得されたオブジェクトのロックを待機しているとき、そのスレッドによってブロックされます。

    他のスレッドでwait()を実行すると、スレッドは待ち状態に入ると言うことができますか?

    同じスレッドでjoin()を呼び出す場合も同じです。

    したがって、wait()(java.lang.Objectから)とjoin()(java.lang.Threadから)の両方で、スレッドの状態がWAITINGに変更されるといいでしょうか?

  • 答えて

    4

    これはjavadoc of Thread.Stateで説明されています

    待機中のスレッドのために

    スレッドの状態をWAITINGのpublic static final Thread.State。スレッドが原因次のいずれかの方法を呼び出すのを待っている状態 である:別のスレッドが 特定のアクションを実行するのを待っている状態のスレッドが待っている

    Object.wait with no timeout 
        Thread.join with no timeout 
        LockSupport.park 
    

    。たとえば、あるオブジェクトに対して というObject.wait()を呼び出したスレッドは、別のスレッドがそのオブジェクトのObject.notify()またはObject.notifyAll()を呼び出すのを待機しています。 がThread.join()を呼び出したスレッドは、指定したスレッドが に終了するのを待機しています。

    +0

    +1言い換えれば、「[RTFM](http://en.wikipedia.org/wiki/RTFM)people」は、 – Bohemian

    関連する問題