public class ThreadState{
public static void main(String[] args){
Thread one = new Thread(new Runnable(){
@Override
public void run(){
System.out.println(Thread.currentThread().getName() + " " + Thread.currentThread().getState());
}
});
Thread two = new Thread(new Runnable(){
@Override
public void run(){
System.out.println(Thread.currentThread().getName() + " " + Thread.currentThread().getState());
}
});
System.out.println(one.getState());
System.out.println(two.getState());
one.start();
two.start();
System.out.println(one.getState());
System.out.println(two.getState());
System.out.println(one.getState());
System.out.println(two.getState());
System.out.println("Main ");
}
}
私はJavaでThread.Stateを学習しようとしていますが、私はそれらの間で混乱しています。上記のコードを実行すると、私は複数の結果を得ました(私はマルチスレッドのために知っています)。Javaマルチスレッドでのスレッド状態のしくみ
しかし、私はそれらの状態を理解することができません。
1)ここでは、私が学びたいと思っている2つのアウトプットを、どれか一つ説明できますか?
NEW
NEW
RUNNABLE
RUNNABLE
RUNNABLE
RUNNABLE
Thread-0 RUNNABLE
Thread-1 RUNNABLE
Main
これは2番目です。
NEW
NEW
RUNNABLE
BLOCKED
BLOCKED // 2) Why go to again BLOCKED state? as before it was in RUNNABLE state
BLOCKED
Main
Thread-0 RUNNABLE
Thread-1 RUNNABLE
私は既に何がNEW状態であるかについて知っています。何がRUNNABLE状態ですか。しかし、私はブロックと待機状態について混乱しています。
Student object1 = new Student(); // any shared resource
Thread t1 = new Thread(/*......*/); => NEW State
Thread t2 = new Thread(/*......*/); => NEW State
t1.start(); => RUNNABLE STATE
t2.start(); => RUNNABLE STATE
`t1` and `t2` trying to get lock on object1 and `t1` successfully got locked on object1.
3)今t2
は、ブロックされた状態または待ち状態になりますか?
`t1` called `wait()` method and released lock.
`t2` got the lock and `t1` now in WAITING state.
`t2` called `notify();` and released lock.
`t1` got the lock
4)t2
は、ブロック状態または待機状態になりますか?
`t1.run();` finished => TERMINATED State
`t2.run();` finished => TERMINATED State
5)スレッドが終了しても各スレッドの履歴を保持しますか?そうでなければ、JVMはすでに終了したスレッドのTERMINATED状態をどのように表示しますか?
これはhttp://stackoverflow.com/questions/15680422/difference-between-wait-and-blocked-threadstateを読んでいますか? –
@NicolasFilotto読まない。あなたは2)、5)数字の質問と上記の結果からの出力を説明できますか? –
#2を正確に取得するために何をしましたか?それをループに入れましたか? –