Я ищу проверки/аргументы на следующее:В каком состоянии находится спальная нить?
Нить в точности один из 5 (+1 - 2 для WAITING
) states в любой момент времени.
Пусть волоске T
вызовы
Thread.sleep (3000);
и, таким образом, погружается в сон на 3 секунды.
В каком состоянии оно находится в течение этих 3 секунд?
Очевидно, что start()
-ed и по-прежнему жив, поэтому не является NEW
или TERMINATED
.
Он не ждет ни одного замка. Фактически, он не выпустил ни одного замка, который он имел перед этим вызовом, поэтому это не BLOCKED
.
Это не ждет другой темы. Ожидает себя в некотором смысле - но это не спецификация состояния WAITING
. То, что получает поток в состояние WAITING
, является одним из вызовов: Object.wait()
, Thread.join()
и LockSupport.park()
.
Таким образом, это должно быть RUNNABLE
- единственное, что осталось от состояний резьбы. Однако RUNNABLE
- это состояние, выполняемое потоком на JVM - включено для времени процессора и, следовательно, для сжигания ресурсов. Спящая нить, находящаяся на графике процессора, кажется противоречивой.
У меня что-то отсутствует?
TIA.
Он заблокирован, он ждет ОС, чтобы разбудить его для ввода/вывода. –
Re "RUNNABLE - это состояние, выполняемое потоком на JVM", True, когда вы говорите о потоке библиотеки Java.getState(), но на всякий случай вам интересно; в номенклатуре многих операционных систем «runnable» означает, что поток «не работает», потому что он ожидает, что доступный процессор будет запущен. –