В этой статье я расскажу о «Java Threads».

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

Потоки позволяют программе работать более эффективно, выполняя несколько задач одновременно.

Eg:

Пример видеоигры

· одна нить для графики

· один поток для взаимодействия с пользователем

· один поток для работы в сети

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

  • легче программировать (1 поток на задачу)
  • может обеспечить лучшую производительность (поток запускается только при необходимости, без опроса, чтобы решить, что делать)
  • несколько потоков могут совместно использовать ресурсы
  • использовать несколько процессоров, если они доступны

Недостатки:

  • несколько потоков могут привести к взаимоблокировке (подробнее об этом позже)
  • накладные расходы на переключение между потоками

Создание тем (способ 1)

  • расширение класса Thread

— должен реализовать метод run()

— поток завершается, когда завершается метод run()

— вызовите .start(), чтобы подготовить поток к запуску

Создание тем, пример 1

  • основной поток - это просто еще один поток (бывает, что он начинается первым)
  • основной поток может закончиться раньше других
  • любой поток может порождать больше потоков

Создание тем (способ 2)

  • реализация интерфейса Runnable

- практически идентично расширению класса Thread

— все еще необходимо определить метод run()

— настройка потоков немного отличается

Создание потоков, пример 2

  • main немного сложнее
  • все остальное идентично по большей части

Преимущества использования Runnable

  • помните — можно расширить только один класс
  • реализация runnable позволяет классу расширять что-то еще

Управление потоками Java

  • _.start(): запускает поток
  • wait() и notify(): для синхронизации — подробнее об этом позже
  • _.stop(): убивает определенный поток (устаревший)
  • _.suspend() и резюме(): устарели
  • _.join(): дождитесь завершения определенного потока
  • _.setPriority(): от 0 до 10 (от MIN_PRIORITY до MAX_PRIORITY); 5 по умолчанию (NORM_PRIORITY)

Расписание потоков Java

  • Выполняется поток с наивысшим приоритетом - если их несколько, произвольный
  • yield(): текущий поток отказывается от процессора, чтобы мог работать другой поток с таким же приоритетом - если нет ни одного с равным приоритетом, он запускается снова
  • sleep(msec): остановить выполнение на заданное время - может работать поток с более низким приоритетом

Состояния потоков Java

4 отдельных состояния

— новый: только что созданный, но не запущенный

— runnable: создан, запущен и может работать

— заблокировано: создано и запущено, но не может быть запущено, так как ожидает какого-либо события

— dead: поток завершен или остановлен

Я думаю, вы могли получить четкое представление о «Java Threads» из этой статьи.

Спасибо!