Thread
Thread
API для потоков, которыми управляет JVM и ОС. Наследуется от Runnable
. Поток закончит выполнение когда завершится его метод run
.
val thread = Thread(
object: Runnable {
override fun run() {
// выполнение нового потока
}
}
)
thread.start()
isDaemon
Потоки-демоны используются для выполнения фоновых задач обслуживающих процесс в течение его жизни. Если завершается последний обычный поток в процессе - потоки-демоны будут завершены принудительно.
val thread = Thread {}
thread.isDaemon = true
thread.start()
interrupt
Метод прерывания потока. Методы приостанавливающие выполнение потока sleep
wait
join
при вызове прерывания сгенерируют InterruptedException
.
val thread = Thread {}
thread.interrupt() // прервать поток
thread.isInterrupted // проверить прерван ли поток. вызывается только изнутри потока
Thread.sleep
Приостанавливает выполнение потока в котором был вызван. Во время выполнения метода sleep
система перестает выделять потоку процессорное время распределяя его между другими потоками. Выполняется либо указанное количество времени либо пока не будет остановлен прерыванием.
val thread = Thread {
Thread.sleep(1000L)
}
Thread.yield
Переключает процессор на обработку других потоков.
while (!msgQueue.hasMessages()) { // пока в очереди нет сообщений
Thread.yield() // передать управление другим потокам
}
join
Механизм позволяющий одному потоку ждать завершения выполнения другого. В параметр можно указать время ожидания.
thread.join() // возвращает управление когда завершится ожидаемый поток
thread.join(1000L) // возвращает управление когда завершится ожидаемый поток или закончится время
Priority
Каждый поток в системе имеет свой приоритет. Система в первую очередь выполняет потоки с большим приоритетом, а потоки с меньшим приоритетом получают процессорное время только тогда, когда их более привилегированные собратья простаивают.
MIN_PRIORITY | минимальный приоритет. |
NORM_PRIORITY | дефолтный умолчанию. |
MAX_PRIORITY | максимальный приоритет. |
thread.priority = Thread.MAX_PRIORITY
isAlive
Возвращает true если поток выполняется и false если поток завершен или не был запущен.
thread.isAlive
name
Задать имя потока. Помогает понять какой поток выполняет некоторое действие.
thread.name = "MyThread"
id
Возвращает идентификатор потока. Это уникальное число присвоенное потоку.
thread.id
Thread.currentThread
Возвращает объект потока в котором вызван.
val thread = Thread {
Thread.currentThread()
}
Java Thread. Вопросы на собесе
- Как создать новый поток с использованием класса Thread?
- Зачем нужен метод join и когда его следует использовать?
- Как управлять приоритетом потоков в Java?
- Как работают методы yield и interrupt?