28. Соб 1. Какие приоритеты нитей бывают? Можно ли остановить нить, снизив ее приоритет до 0? Зачем нужен класс ThreadGroup? В какой группе нитей состоит main-thread? Что такое паттерн ThreadPool?
1. Які бувають пріоритети ниток?
Пріоритет ниток використовується для оптимізації коду.
Встановлюється методом public final void setPriority(int newPriority), де newPriority – число від 1, або Thread.MIN_PRIORITY (найнижчий пріоритет) до 10 або Thread.MAX_PRIORITY (найвищий пріоритет). Середній пріоритет 5 (Thread.NORM_PRIORITY) встановлюється за замовчуванням) при створенні нитки.
Встановлений пріоритет є «рекомендацією» для JVM – Java-машина керує нитками за власними алгоритмами.
--
public final int
getPriority() – отримати пріоритет нитки.
2. Чи
можна зупинити нитку, знизивши її пріоритет до 0?
Ні, при встановленні пріоритету 0 вилетить виняток IllegalArgumentException,
так як допустимий діапазон пріоритетів [1; 10].
Дати рекомендацію планувальнику потоків для зупинки нитки
можна використовуючи метод interrupt().
3. Навіщо потрібен клас ThreadGroup?
ThreadGroup необхідний для захисту потоків від небажаного
зовнішнього впливу: потік має право доступу до даних зі своєї групи ниток, але
не до даних інших груп чи навіть батьківської групи. Тобто, у класі ThreadGroup є
методи, які дозволяють впливати на потоки певної групи та змінювати їх.
(Всі потоки знаходяться в групах, представлених екземплярами
класу ThreadGroup. ThreadGroup утворює дерево, де кожна група потоків має
батьківський потік (крім кореневого). Група вказується при створенні потоку.
Якщо група не вказана, потік заноситься до тієї ж групи, в якому знаходиться
батьківський потік).
4. В якій групі знаходиться main-thread?
Потік main знаходиться в групі main, яка в свою чергу
належить кореневій групі system.
5. Що таке патерн ThreadPool?
Пул потоків (ThreadPool)
– це патерн паралельності, при якому створюється
розумна кількість потоків для виконання
великої кількості задач. Кількість потоків у пулі може бути фіксована (FixedThreadPool)
або може змінюватись залежно від кількості виникаючих завдань (CashedThreadPool).
Після виконання
надісланих завдань потік переходить у стан очікування і повторно
використовуються для майбутніх завдань.
За умови якщо завдань більше, ніж створених потоків – їх необхідно помістити в
чергу (Queue).
Паттерн мінімізує
витрати ресурсів на створення (а
по завершенню виконання задачі, видалення) для кожної нової задачі нового потоку.
Коментарі
Дописати коментар