Многопоточность в Java
Пока пользователь читает статью, сервер может одновременно отдавать другим запросам превью, писать лог и проверять сессию. Если всё это делать строго по очереди в одном потоке, отклик сайта заметно проседает, хотя процессор часто простаивает в ожидании сети или диска.
Многопоточность позволяет вести несколько цепочек выполнения внутри одной JVM. Каждая такая цепочка называется потоком. У потока свой стек вызовов, но память кучи и статические поля общие для всей программы, поэтому данные нужно защищать осознанно.
Любая программа на Java стартует с главного потока,
который входит в метод main. Дополнительные потоки
создают явно, когда фоновая работа не должна блокировать
интерфейс или когда задачу удобнее распараллелить.
В разделе для Java 27 опираемся на класс Thread и
контракт Runnable. Позже в других темах встретятся
пулы и высокоуровневые API, но базовые правила запуска,
ожидания и прерывания те же.
Короткий пример: главный поток печатает имя текущего
потока через Thread.currentThread():
public class Main {
public static void main(String[] args) {
Thread main = Thread.currentThread();
System.out.println(main.getName());
System.out.println(main.isAlive());
}
}
Имя по умолчанию обычно main, флаг isAlive
показывает, что поток ещё не завершился. В следующих
уроках создадим свой поток, запустим его и дождемся
окончания работы.