スレッドの状態を BLOCKED に変更しません。
public static void main(String[] args) throws IOException {
Thread main = Thread.currentThread();
new Thread(() -> {
for (int i = 0; i < 10; i++) {
System.out.println(main + " is in "+main.getState()+" state");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new AssertionError(e);
}
}
}).start();
System.in.read();
}
版画
Thread[main,5,main] is in RUNNABLE state
Thread[main,5,main] is in RUNNABLE state
Thread[main,5,main] is in RUNNABLE state
Thread[main,5,main] is in RUNNABLE state
Thread[main,5,main] is in RUNNABLE state
Thread[main,5,main] is in RUNNABLE state
Thread[main,5,main] is in RUNNABLE state
Thread[main,5,main] is in RUNNABLE state
Thread[main,5,main] is in RUNNABLE state
Thread[main,5,main] is in RUNNABLE state
read
代わりに、OSは何らかのデータが存在し、OS がスレッド/プロセスをコンテキスト スイッチするかどうか、およびそのタイミングを決定するまで、から戻りません。
JVM は、読み取ろうとしているリソース内のデータが再び使用可能になったときに、続行できることをスレッドにどのように通知しますか?
OS は、さらにデータがあるか、ストリームが閉じられると、スレッドを起こします。JVM は関与しません。