Java Урок 45: ПОТОКИ, Thread, главный поток

Java предлагает встроенную поддержку многопоточного программирования.
Многопоточная программа содержит две или более частей, которые могут выполняться одновременно. Каждая часть такой программы называется потоком (thread), и каждый поток задает отдельный путь выполнения.

Скачать исходники для статьи можно ниже

Когда программа Java стартует, немедленно начинает выполняться один поток.
Обычно этот поток называют главным потоком (main thread) программы, потому что это тот поток, который запускается вместе с вашей программой.
Запуск потока происходит в методе main:

public static void main(String args[]) {
// здесь находится код, который выполняется в главном потоке
// ...
}

Давайте подробнее разберем этот код.
public — означает, что метод публичный, соответственно java имеет доступ к этому методу при старте программы.
static — означает, что метод статичный, соответственно его можно вызвать без создания объектов, а при запуске программы еще не существует ни одного объекта.
void — означает, что программа не возвращает никаких значений, здесь это не надо.
main — просто название метода, в котором стартует главный поток.
String args[] — аргумент метода main. В подавляющем большинстве случаев никак не используется. Дело в том, что в языке Java разрешено использовать несколько методов с названием main() даже в одном классе. Поэтому по-настоящему главный метод содержит аргументы командной строки (String[] args). Таким образом, «String[] args»
служит для дополнительной идентификации метода main, который запускает главный поток.

Главный поток важен по двум причинам.

— Это поток, от которого порождаются все «дочерние» потоки.
— Часто он должен быть последним потоком, завершающим выполнение, так
как предпринимает различные завершающие действия.

Несмотря на то, что главный поток создается автоматически при запуске программы, им можно управлять через объект класса Thread. Для этого следует получить ссылку на него вызовом метода currentThread(), который является открытым статическим (public static) методом класса Thread. Его общая форма выглядит следующим образом:

static Thread currentThread()

Этот метод возвращает ссылку на поток, из которого он был вызван. Получив ссылку на главный поток, вы можете управлять им точно так же, как любым другим.
Рассмотрим следующий пример.

// Управление главным потоком,
class CurrentThreadDemo {
   public static void main(String args[]) {
      Thread t = Thread.currentThread();
      System.out.println("Текущий поток: " + t);
      // изменить имя потока
      t. setName ("Мой ГЛАВНЫЙ ПОТОК");
      System.out.println("После изменения имени: " + t);
   }
}

Ниже показан вывод этой программы:
Текущий поток: Thread[main,5,main]
После изменения имени: Thread[Мой ГЛАВНЫЙ ПОТОК,5,main]

В этой программе ссылка на текущий поток (в данном случае — главный) получается вызовом метода currentThread(), и эта ссылка сохраняется в локальной переменной t. Далее программа отображает информацию о потоке. Программа вызывает метод setName() для изменения внутреннего имени потока. После этого информация о потоке отображается заново.

Обратите внимание на то, что вывод создается, когда переменная t используется в качестве аргумента для метода println(). Он отображает по порядку имя потока, его приоритет и имя его группы.

По умолчанию имя главного потока — main. Его приоритет равен 5, что является значением по умолчанию, a main — также имя группы потоков, к которой относится данный.

Группа потоков — это структура данных, которая управляет состоянием набора потоков в целом. После того, как имя потока изменено,
переменная t выводится вновь. На этот раз отображается новое имя потока.

Класс Thread определяет ряд методов, которые помогают управлять потоками.
Вот некоторые из них:

getName — метод, который позволяет получить имя потока
getPriority — метод, который позволяет получить приоритет потока
setName — метод, который позволяет изменить имя потока
setPriority — метод, который позволяет изменить приоритет потока
activeCount() — метод, который сообщает о количестве работающих потоков
sleep() — метод, который позволяет приостановить выполнение потока на заданное время

Метод sleep() заставляет поток, из которого он был вызван, приостановить выполнение на указанное количество миллисекунд. Его общая форма выглядит так:

static void sleep(long миллисекунды) throws InterruptedException

Количество миллисекунд, на которое нужно приостановить выполнение, передается в параметре миллисекунды. Этот метод может передать исключение InterruptedException, поэтому этот метод необходимо обернуть в конструкцию try catch.

Введите свой email адрес для того, чтобы подписаться на мой блог:


knopkisoc

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *