Работоспособные потоки Java

Работоспособные потоки JavaКак только вы вызовете метод start(), поток оказывается в работоспособном(runnable) состоянии. Работоспособный поток может в данный момент выполняться, а может и нет. Зависит от операционной системы — будет ли выделено потоку время на выполнение. Спецификация Java, однако не назысает это отдельным состоянием. Работающий поток также находится в «работоспособном» состоянии.

Если поток запущен, он не обязательно постоянно продолжает выполняться. Фактически, даже желательно, чтобы выполняющийся поток периодически приостанавливался, давая возможность поработать другим потокам. Детали планирования выполнения потоков зависит от служб, предоставляемых операционной системой.

Системы с примитивным планированием выделяют каждому работоспособному потоку по отрезку времени ждя выполнения задачи. Когда этот отрезок истекает, операционная система выгружает поток и дает возможность поработать другому потоку(смотрите рис.1). Выбирая следующий поток, операционная система принимает во внимание приоритеты потока.

Работоспособные потоки JavaРис.1. Одновременный доступ из двух потоков

Все современные настольные и серверные операционные системы используют вытесняющее то есть приоритетное планирование. Однако портативные устройства, такие как мобильные телефоны, могут использовать кооперативное планирование. В таких устройствах поток утрачивает управление, только когда вызывает метод yield(), блокируется или находится в состоянии ожидания.

На машинах с несколькими процессорами каждый процессор может выполнять поток, и можно иметь несколько потоков, работающих одновременно. Конечно, если потоков больше, чем процессоров, планировщик вынужден заниматься делением времени.

Следует всегда помнить, что работоспособность поток в любой момент времени может выполняться, а может и простаивать(вот почему состоянием называется «работоспособным», а не «работающим»).