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) встановлюється за замовчуванням) при створенні нитки

Встановлений пріоритет є «рекомендацією» для JVMJava-машина керує нитками за власними алгоритмами.

--

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).  

Паттерн мінімізує  витрати ресурсів на створення  (а по завершенню виконання задачі, видалення)  для кожної нової задачі нового потоку.

 

 

Коментарі

Популярні дописи з цього блогу

27 Гугл 1 goto. Зарезервовані (ключові) слова. wait не в блоці synchronized. happens-before. BlockingQueue. Методи BlockingQueue

29. Соб. Как примитивные типы приводятся к непримитивным аналогам? Как непримитивные типы приводятся к примитивным? Как сравниваются примитивные и непримитивные типы? Всегда ли создается новый объект при операции autoboxing? Как работает кэширование при операции autoboxing? Для каких типов и/или значений работает кэширование?

30. Соб-2 Как установить бит в единицу в битовой маске? Как установить бит в ноль в битовой маске? Как получить значение определенного бита в битовой маске? Что такое ленивое вычисление выражения? Чем отличается использование && и & для типа boolean?