Thread

Многопоточность в Java

Поддержка многопоточности встроена непосредственно в язык Java. Создать новый исполняемый поток не составляет труда:

Thread t = new Thread(); t.start();

Вот и всё. Создавая новый объект Thread, мы запускаем отдельный исполняемый поток, содержащий свой стек вызовов.

Только есть одна проблема

Этот поток ничего не делает, поэтому он "умрёт" сразу после своего появления. Со смертью потока исчезает и его новый стек. Конец истории.

Итак, мы упустили один ключевой компонент - задачу, выполняемую потоком. Иными словами, нужен код, который мы хотим выполнить в отдельном потоке.

Многопоточность в Java подразумевает наличие как самого потока, так и выполняемой им задачи. Вы также должны познакомиться с елассом Thread из пакета java.lang (помните, что этот пакет импортируется сам и содержит классы, наиболее фундаментальные для языка, включая String и System).

Поток выполняется отдельно. Это означает, что у него есть свой стек вызовов. Любая Java-программа создаёт главный поток, который на дне свого стека содержит метод main(). За запуск главного потока отвечает JVM (она контролирует и другие потоки, например, поток для сбора мусора). Как программист вы можете написать код для создания собственных потоков.

Что означает иметь несколько стеков вызовов?

При наличии нескольких стеков вызовов создаётся видимость того, что разные действия выполняются одновременно. На практике только настоящая мультипроцессорная система способна выполнять несколько операций в один момент времени. В случае с потоками в Java управление может переходить от одного стека к другому настолько быстро, что создаётся впечатление, будто все стеки выполняются одновременно. Помните, Java - это всего лишь процесс, работающий под управлением исходной ОС. Итак, Java сам представляет собой "текущий процесс", выполняющийся в операционной системе. Но что именно при этом запускается внутри JVM? Какой байт-код выполняется? Код, который находится на вершине текущего стека! И на протяжении каких-то 100 мс система может переключиться на другой метод в другом стеке.

Поддержите проект, если он помог вам

Проект продвигается за счёт личных средств и времени авторского коллектива. Если вы нашли здесь то, что искали, то вы можете выразить свою благодарность финансово. Даже небольшой платёж помогает авторам в их труде, сохраняя их вовлечённость и высокую мотивацию чтобы строить открытый мир равных возможностей для всех неравнодушных людей вокруг.