title | tags |
---|---|
Threads |
Java, Basic, Thread, ThreadGroup |
Главный поток программы можно получить вызвав метод Thread.currentThread()
.
Многие методы требуют обработки исключения InterruptedException.
Метод | Назначение |
---|---|
getName | Возвращает имя потока |
getPriority | Получает приоритет потока исполнения |
isAlive | Определяет, выполняется ли поток |
join | Ожидает завершения потока исполнения |
run | Задает точку входа в поток исполнения |
yield | заставляет процессор переключиться на обработку других потоков системы |
sleep | Приостанавливает выполнение текущего! потока на заданное время |
start | Запускает поток исполнения, вызывая его метод run() |
stop | Аварийно завершает поток deprecated |
interrupt | Устанавливает значение переменной isInterrupted в true и выкидывает исключение InterruptedException |
Для работы с приоритетом потока есть методы getPriority
и setPriority
. Значения приоритета могут быть от 1 до 10.
Приоритет потока позволяет планировщику потоков отдавать предпочтение определённым потокам и выделять им больше времени.
Для значений приоритетов есть статические переменные MAX_PRIORITY
, MIN_PRIORITY
и NORM_PRIORITY
.
При создании потока можно указать в какой он будет группе. Если группа не указывается, то вероятнее он возьмётся из потока, который инициирует создание.
В Java процесс завершается тогда, когда завершается последний его поток. Даже если метод main()
уже завершился, но еще выполняются порожденные им потоки, система будет ждать их завершения.
Однако это правило не относится к особому виду потоков – демонам. Если завершился последний обычный поток процесса, и остались только потоки-демоны, то они будут принудительно завершены и выполнение процесса закончится. Чаще всего потоки-демоны используются для выполнения фоновых задач, обслуживающих процесс в течение его жизни.
Объявить поток демоном достаточно просто — нужно перед запуском потока вызвать его метод setDaemon(true);
Проверить, является ли поток демоном, можно вызвав его метод boolean isDaemon();
Чтобы получить текущее состояние потока нужно вызвать его метод getState()
.