Функция thread

Функция thread создает и немедленно запускает новый поток выполнения. Позволяет настроить различные параметры потока: имя, приоритет, демонический режим, а также указать код для выполнения через лямбда-выражение или объект Runnable. Возвращает объект типа Thread для управления созданным потоком.

Импорт

kotlinimport kotlin.concurrent.thread

Синтаксис

kotlinfun thread(
  start: Boolean = true,
  isDaemon: Boolean = false,
  contextClassLoader: ClassLoader? = null,
  name: String? = null,
  priority: Int = -1,
  block: () -> Unit
): Thread

Параметры

start - флаг автоматического запуска потока (по умолчанию true);

isDaemon - флаг демонического потока (по умолчанию false);

contextClassLoader - загрузчик классов для потока;

name - имя потока;

priority - приоритет потока (от 1 до 10);

block - лямбда-выражение с кодом для выполнения в потоке.

Пример

Создадим и запустим простой поток с выводом сообщения:

kotlinval th = thread {
  println("Thread is running")
}

th.join()

Результат выполнения кода:

kotlinString "Thread is running"

Пример

Создадим поток с именем и демоническим режимом:

kotlinval th = thread(
  name = "MyThread",
  isDaemon = true
) {
  println("Daemon thread: ${Thread.currentThread().name}")
}

println("Main thread")

Результат выполнения кода:

kotlinString "Main thread"
String "Daemon thread: MyThread"

Пример

Создадим поток с отложенным запуском:

kotlinval th = thread(start = false) {
  println("Thread started manually")
}

Thread.sleep(1000)
th.start()
th.join()

Результат выполнения кода:

kotlinString "Thread started manually"

Пример

Создадим несколько потоков для параллельной обработки данных:

kotlinval results = mutableListOf<Int>()
val threads = mutableListOf<Thread>()

for (i in 1..3) {
  val th = thread {
    Thread.sleep(1000)
    results.add(i * 10)
  }
  threads.add(th)
}

threads.forEach { it.join() }
println("Results: $results")

Результат выполнения кода:

kotlinList<Int> [10, 20, 30]

Смотрите также

  • функцию suspend,
    которая используется для suspend-функций в корутинах
  • функцию async,
    которая запускает асинхронную операцию и возвращает Deferred
  • функцию launch,
    которая запускает новую корутину без возврата результата
  • функцию yield,
    которая приостанавливает выполнение текущей корутины