1. Runnable об'єкти
Ось ми і дісталися до найбільшої частини пакета. Тут описуватимуться інтерфейси для запуску асинхронних завдань із можливістю отримати результати через Future та Callable інтерфейси, а також сервіси та фабрики для створення thread pools: ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool.
Для кращого розуміння зробимо невелику декомпозицію інтерфейсів та класів.
2. Реалізації runnable об'єктів
Future<V>
— чудовий інтерфейс для отримання результатів роботи асинхронної операції. Ключовим методом тут є метод get, який блокує поточний потік (з таймаутом або без) до завершення роботи асинхронної операції в іншому потоці. Також додатково існують методи для скасування операції та перевірки поточного статусу. Як імплементацію часто використовується клас FutureTask.
RunnableFuture<V>
— якщо Future – це інтерфейс для Client API, інтерфейс RunnableFuture вже використовується для запуску асинхронної частини. Успішне завершення методу run() завершує асинхронну операцію та дозволяє витягувати результати через метод get.
Callable<V>
— розширений аналог інтерфейсу Runnable для асинхронних операцій. Дозволяє повертати типізоване значення та кидати checked exception. Незважаючи на те, що в цьому інтерфейсі немає методу run(), багато класів java.util.concurrent підтримують його поряд з Runnable.
FutureTask<V>
— імплементація інтерфейсу Future/RunnableFuture. Асинхронна операція приймається на вхід одного з конструкторів як Runnable або Callable об'єктів. Сам клас FutureTask призначений для запуску в worker потоці, наприклад, через new Thread(task).start() або через ThreadPoolExecutor. Результати асинхронної операції витягуються через метод get(...).
Delayed
— використовується для асинхронних завдань, які мають розпочатися у майбутньому, а також у DelayQueue. Дозволяє встановлювати час до початку асинхронної операції.
ScheduledFuture<V>
— маркерний інтерфейс, що поєднує Future та Delayed інтерфейси.
RunnableScheduledFuture<V>
— інтерфейс, що поєднує RunnableFuture та ScheduledFuture. Додатково можна вказувати, чи є завдання одноразовим чи має запускатися зі встановленою періодичністю.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ