Многопоточное Программирование Java


Апрель 15, 2016 – 06:55
Многопоточное программирование

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

Класс Thread

В Java функциональность отдельного потока заключается в классе Thread. И чтобы создать новый поток, нам надо создать объект этого класса. Но все потоки не создаются сами по себе. Когда запускается программа, начинает работать главный поток этой программы. От этого главного потока порождаются все остальные дочерние потоки.

С помощью статического метода Thread.currentThread мы можем получить текущий поток выполнения:

public static void main(String args) { Thread t = Thread.currentThread; // получаем главный поток System.out.println(t.getName); // main }

По умолчанию именем главного потока будет main.

Для управления потоком класс Thread предоставляет еще ряд методов. Наиболее используемые из них:

  • qetName: возвращает имя потока
  • setName(String name): устанавливает имя потока
  • qetPriority: возвращает приоритет потока
  • setPriority(int proirity): устанавливает приоритет потока. Приоритет является одним из ключевых факторов для выбора системой потока из кучи потоков для выполнения. В этот метод в качестве параметра передается числовое значение приоритета - от 1 до 10. По умолчанию главному потоку выставляется средний приоритет - 5.
  • isAlive: возвращает true, если поток активен
  • isInterrupted: возвращает true, если поток был прерван
  • join: ожидает завершение потока
  • run: определяет точку входа в поток
  • sleep: приостанавливает поток на заданное количество миллисекунд
  • start: запускает поток, вызывая его метод run

Мы можем вывести всю информацию о потоке:

public static void main(String args) { Thread t = Thread.currentThread; // получаем главный поток System.out.println(t); // main }

Source: metanit.com
Похожие публикации