Sobes.tech
Назад к вопросам
Senior
5

Какие отличия у native thread и виртуального треда (Java)?

Компании, где спрашивали
Технократия

Ответ от нейросети

sobes.tech AI

В Java native thread — это классический поток операционной системы, который создаётся и управляется JVM, но при этом напрямую отображается на системный поток. Виртуальный тред (virtual thread), появившийся с Project Loom, — это легковесный поток, реализованный на уровне JVM, который не соответствует одному системному потоку.

Основные отличия:

  • Ресурсы: native thread требует значительных ресурсов ОС (стек, дескрипторы), виртуальные треды гораздо легче и могут создаваться в большом количестве.

  • Планирование: native thread планируется ОС, что может приводить к накладным расходам и переключениям контекста. Виртуальные треды планируются JVM, что позволяет более эффективно использовать системные потоки.

  • Масштабируемость: виртуальные треды позволяют запускать миллионы параллельных задач, что сложно с native thread.

  • Блокировки: при блокировке виртуального треда JVM может переключить выполнение на другой виртуальный тред без блокировки системного потока.

Пример создания виртуального треда (Java 19+):

Thread.startVirtualThread(() -> {
    System.out.println("Виртуальный тред работает");
});

Таким образом, виртуальные треды — это инструмент для более масштабируемой и эффективной многопоточности, скрывающий сложности управления системными потоками.