28. Соб 2. Зачем нужен класс ThreadPoolExecutor? Сколько способов создать нить вы знаете? (Thread, Runnable, Callable) Для чего используется класс Future? В чем преимущества Callable над Runnable? Можно ли отменить выполнение задачи, если использовать класс Future?

 6. Навіщо потрібен клас ThreadPoolExecutor?

public class ThreadPoolExecutor extends AbstractExecutorService. ExecutorService, виконує кожне надіслане завдання за допомогою одного або кількох об’єднаних потоків, зазвичай створених за допомогою методів Executors.

Пули потоків вирішують дві різні проблеми: вони зазвичай забезпечують покращену продуктивність під час виконання великої кількості асинхронних завдань завдяки зменшенню накладних витрат на виклик кожного завдання, і вони забезпечують засоби обмеження та керування ресурсами, включаючи потоки, використовувані під час виконання набору задач. Кожен ThreadPoolExecutor також підтримує деяку базову статистику, таку як кількість виконаних завдань.

Щоб бути корисним у широкому діапазоні контекстів, цей клас надає багато настроюваних параметрів. Проте програмістам рекомендується використовувати більш зручні методи фабрики Executors Executors.newCachedThreadPool() (необмежений пул потоків, з автоматичним відновленням потоків), Executors.newFixedThreadPool(int) (пул потоків фіксованого розміру) і Executors.newSingleThreadExecutor() (єдиний фон потік), які попередньо налаштовують параметри для найпоширеніших сценаріїв використання.

 

 

7.  Скільки способів створення ниток ви знаєте? (Thread, Runnable, Callable<T>)

В java існує три способи створення нитки.

Створити об’єкт  класу, що є підкласом Thread, перевизначити метод run().

Створити об’єкт класу, що реалізує функціональний інтерфейс java.lang.Runnable та реалізувати його метод run().

Створити об’єкт класу, що реалізує функціональний інтерфейс java.util.concurrent.Callable та реалізувати його метод call().

 

 

8. Для чого використовується клас Future?

Future надає результат асинхронного обчислення. Класом Future пропонуються методи для перевірки завершення обчислення, очікування завершення, і отримання результату обчислення.  Результат можна отримати за допомогою get() лише після завершення обчислення. Звернення get() блокуються, якщо обчислення  ще не завершено.

Відміна завдання виконується методом cancel().  Задачу не можна відмінити після її завершення. У випадку якщо Future використовується задля можливості за потреби відмінити завдання не отримуючи при цьому результат, можна оголосити тип Future<?> і повернення null в якості результату обчислення.

 

 

9.  Які переваги Callable над Runnable?

Callable аналогічний Runnable, оскільки обидва інтерфейси призначені для класів, які потенційно виконуються іншим потоком, але Callable є параметризованим, повертає результат і може генерувати перевірений виняток.

 

 

10.  Чи можна відмінити виконання задачі, якщо використовувати класс Future?

Можна спробувати відмінити виконання задачі методом boolean cancel(boolean mayInterruptIfRunning) . 

Ця спроба не вдасться якщо задача вже виконана або вже відмінена. Якщо задача вже запущена, параметр boolean mayInterruptIfRunning вказує чи повинен потік, що виконує цю задачу, бути перерваним при спробі відмінити задачу (true – потік, що виконує цю задачу, має бути перерваний, false – незавершені задачі можуть бути завершені).

boolean isCancelled() повертає true, якщо задача була відмінена до її нормального завершення.

Коментарі

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

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

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

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