Ответ 1
Я использовал google, и на первой странице, которая появилась, была очень хорошая диаграмма, которая в значительной степени описывает все, что вам нужно/нужно знать. В следующий раз его стоит попробовать google для этих типов вопросов.
1) Новый
Поток находится в новом состоянии, если вы создаете экземпляр класса Thread, но перед вызовом метода start().
2) Runnable
Поток находится в состоянии runnable после вызова метода start(), но планировщик потоков не выбрал его для текущего потока.
3) Выполнение
Нить находится в запущенном состоянии, если планировщик потока выбрал его.
4) Время ожидания
Время ожидания - это состояние потока для ожидающего потока с заданным временем ожидания. Поток находится в состоянии ожидания по времени из-за вызова одного из следующих методов с заданным положительным временем ожидания:
- Thread.sleep(отхода ко сну)
- Object.wait(тайм-аут)
- Thread.join(тайм-аут)
- LockSupport.parkNanos(тайм-аут)
- LockSupport.parkUntil(тайм-аут)
5) Non-Runnable (Blocked)
Это состояние, когда поток все еще жив, но в настоящее время он не может быть запущен.
6) Заканчивается
Поток заканчивается или мертв, когда его метод run() завершает работу.
Надеюсь, это ответит на ваш вопрос:).
Парковка:
Отключает текущий поток для целей планирования потоков, если только разрешение доступно.
Потоки припарковываются или приостанавливаются, если вы хотите называть это так, потому что у него нет разрешения на выполнение. После того, как разрешение будет предоставлено, поток будет неаккурен и выполнен.
Разрешения LockSupport связаны с потоками (т.е. разрешение передается конкретному потоку) и не накапливаются (т.е. может быть только одно разрешение на поток, когда поток потребляет разрешение, он исчезает).