Thread(Поток)

Проработать

  1. Разница между Data Race и Race Condition
  2. Thread'ом Java не испортишь: Часть IV — Callable, Future и друзья
  3. ThreadLocal in Java

Что это

Thread - класс для создания многопоточной работы в JAVA.

Основные разделы

Thread static методы:

Thread методы(после получения через currentThread()):

Exception который появился в отдельном потоке не вернется в main поток. По этому должен быть обработан в своём потоке.

Планировщик потоков

Планировщик потоков - часть JVM, решает какой поток должен выполнится в каждый конкретный момент времени и какой поток нужно приостановить. И меняет им состояния.

Гарантии:

Методы позволяющие влиять на планировщика потоков

Thread.priority

Priority - приоритет используется для очередности переданных задач. Но это не заблокирует задачи с малым приоритетом, они просто будут выполняться реже.

Каждому потоку исполнения в Java присваивается свой приоритет от 1 до 10(5 по умолчанию), который определяет поведение данного потока по отношению к другим потокам в планировщике потоков.

Состояние потока

  1. new - поток создан, но не запущен.
  2. runnable - поток выполняется JVM.
  3. blocked - потом заблокирован, и ждет освобождения монитора.
  4. waiting - в этом состоянии находится поток, который бесконечно ожидает выполнения другим потоком определенного действия.
  5. timed_waiting - в этом состоянии находится поток, ожидающий выполнения действия другим потоком в течение указанного времени ожидания.
  6. terminated - поток завершен. Также потоки не могут быть запущены повторно.

Daemon

Daemon - поток-демон. Поток, который работает в фоновом режиме и не блокирует завершение программы.

Создаётся путем переключение переменой boolean методом setDaemon(), перед запуском потока(start()).

isDaemon() - метод для проверки потока, демон или нет.

Может создавать только потоки-демоны. Даже если явно не указывать setDaemon().

Завершают run() без выполнение finally{}.

Завершаются немедленно(не ждет конца выполнения) - при завершении всех потоков не демонов.