В этой статье я расскажу о «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» из этой статьи.
Спасибо!