---
title: Multithreading
localeTitle: Многопоточность
---
## Многопоточность

Многопоточность - это процесс одновременного выполнения нескольких процессов. Java запускает программу с основным потоком, и дальнейшие потоки добавляются в основной поток всякий раз, когда любой пользователь создает ее. Основной поток - это первый пользовательский поток в любой Java-программе. Кроме того, JVM гарантирует, что все пользовательские потоки будут закрыты до завершения программы.

Нить имеет как преимущества, так и недостатки.

## Преимущества:

*   Запуск кода независимо от других потоков.
*   Создание модульного дизайна.

## Недостатки:

Условия гонки и Deadlock, если потоки не синхронизированы должным образом.

Темы можно разделить на два класса:

*   Пользовательские темы
*   Темы Демона

Нить может быть создана двумя способами:

1.  реализация интерфейса Runnable: В интерфейсе Runnable существует только один метод, т.е. public void run (). Внедрение этого метода гарантирует, что всякий раз, когда этот поток запускает код внутри run (), выполняется.
    
2.  расширяющий класс резьбы. Этот класс также содержит открытый void run (), который нам нужно переопределить, чтобы запустить наш собственный код. Недостаток использования этого метода заключается в том, что у нас есть суперкласс в Thread и не может распространять любой другой класс, который мы можем захотеть.
    

Код для обоих можно найти здесь: http://ide.geeksforgeeks.org/k7GjcA.

Вы заметите, что если этот код запускается несколько раз, результаты могут отличаться. и это определяется ОС, на которой она запущена. ОС может выбрать любой поток из состояния runnable и запустить его. У нас нет НИКАКОГО УПРАВЛЕНИЯ. Если в запущенном состоянии есть несколько потоков (готово к запуску), любой может быть выбран. Это даже не зависит от приоритета.

Дополнительные сведения: https://www.ntu.edu.sg/home/ehchua/programming/java/J5e\_multithreading.html