Термин Runnable
может не означать «работает в данный момент», а «находится в состоянии работы». Различия, к которым вы обращались, заключаются в том, что максимальное количество потоков, которые могут работать в любой момент времени, равно количеству ядер
Чтобы понять это более подробно, вам нужно знать, что означают другие два. WAITING
будет означать, что поток приостановлен на некотором объекте.
while(<condition holds>)
obj.wait()
Здесь текущий поток WAITING
на мониторе obj. Это приведет к приостановке этого потока, в котором ОС может запланировать запуск другого потока.
TIMED_WAITING
просто приостанавливает поток на определенное время.
То есть, если поток не wait
не используется или sleep
не используется, он считается run
ning
Чтобы получить больше информации из документации.
Состояние потока для работающего потока.
поток в работоспособном состоянии
выполнение в виртуальной машине Java
но может ждать других
ресурсы из операционной системы
такой как процессор.
Последняя часть - это то, что, я думаю, вы ищете. Физически ОС не может запускать больше потоков параллельно, чем количество ядер.
Все 9 ваших потоков могут работать одновременно, но только n
будет работать параллельно (n
- количество ядер).
То же самое верно для Condition.await
Edit:
Извините, богатые люди - Мне следовало связать мой ресурс http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.State.html#RUNNABLE