6.1 Изпълними обекти
Така стигнахме до най-голямата част от пакета. Ще бъдат описани интерфейси за изпълнение на асинхронни задачи с възможност за получаване на резултати чрез интерфейсите Future и Callable, Howто и услуги и фабрики за създаване на пулове от нишки: ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool.
За по-добро разбиране, нека направим малка декомпозиция на интерфейси и класове.

6.2 Реализации на изпълними обекти
Future<V>
е чудесен интерфейс за получаване на резултатите от асинхронна операция. Ключовият метод тук е методът get, който блокира текущата нишка (със or без таймаут), докато не завърши асинхронна операция на друга нишка. Има и допълнителни методи за отмяна на операцията и проверка на текущото състояние. Класът FutureTask често се използва като имплементация.
RunnableFuture<V>
- ако Future е интерфейс за API на клиента, тогава интерфейсът RunnableFuture вече се използва за стартиране на асинхронната част. Успешното завършване на метода run() завършва асинхронната операция и позволява резултатите да бъдат извлечени чрез метода get.
Callable<V>
- Разширен аналог на интерфейса Runnable за асинхронни операции. Позволява ви да върнете въведена стойност и да хвърлите проверено изключение. Въпреки че този интерфейс няма метод run(), много класове java.util.concurrent го поддържат заедно с Runnable.
FutureTask<V>
— внедряване на интерфейса Future/RunnableFuture. Асинхронна операция се приема като вход към един от конструкторите под формата на Runnable or Callable обекти. Самият клас FutureTask е проектиран да бъде стартиран в работна нишка, например чрез new Thread(task).start() or чрез ThreadPoolExecutor. Резултатите от асинхронна операция се извличат чрез метода get(...).
Delayed
- използва се за асинхронни задачи, които трябва да стартират в бъдеще, Howто и в DelayQueue. Позволява ви да зададете времето преди началото на асинхронна операция.
ScheduledFuture<V>
- маркерен интерфейс, който съчетава интерфейсите Future и Delayed.
RunnableScheduledFuture<V>
- интерфейс, който комбинира RunnableFuture и ScheduledFuture. Освен това можете да посочите дали задачата е еднократна or трябва да се изпълнява на определена честота.
GO TO FULL VERSION