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. Вопросы на собесе
  1. Как создать новый поток с использованием класса Thread?
  1. Зачем нужен метод join и когда его следует использовать?
  1. Как управлять приоритетом потоков в Java?
  1. Как работают методы yield и interrupt?