6.1 Obiecte executabile

Așa că am ajuns la cea mai mare parte a pachetului. Acesta va descrie interfețe pentru rularea sarcinilor asincrone cu capacitatea de a obține rezultate prin interfețele Future și Callable, precum și servicii și fabrici pentru crearea pool-urilor de fire: ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool.

Pentru o mai bună înțelegere, să facem o mică descompunere a interfețelor și claselor.

6.2 Realizari de obiecte executabile

Future<V>este o interfață minunată pentru obținerea rezultatelor unei operații asincrone. Metoda cheie aici este metoda get, care blochează firul de execuție curent (cu sau fără timeout) până la finalizarea unei operații asincrone pe un alt fir. Există și metode suplimentare pentru anularea operațiunii și verificarea stării curente. Clasa FutureTask este adesea folosită ca implementare.

RunnableFuture<V>- dacă Future este o interfață pentru API-ul Client, atunci interfața RunnableFuture este deja utilizată pentru a porni partea asincronă. Finalizarea cu succes a metodei run() încheie operația asincronă și permite preluarea rezultatelor prin metoda get.

Callable<V>- Un analog extins al interfeței Runnable pentru operații asincrone. Vă permite să returnați o valoare introdusă și să aruncați o excepție bifată. Chiar dacă această interfață nu are o metodă run(), multe clase java.util.concurrent o acceptă împreună cu Runnable.

FutureTask<V>— implementarea interfeței Future/RunnableFuture. O operație asincronă este luată ca intrare la unul dintre constructori sub formă de obiecte Runnable sau Callable. Clasa FutureTask în sine este proiectată pentru a fi lansată într-un fir de lucru, de exemplu, prin nou Thread(task).start() sau prin ThreadPoolExecutor. Rezultatele unei operații asincrone sunt preluate prin metoda get(...).

Delayed- folosit pentru sarcini asincrone care ar trebui să înceapă în viitor, precum și în DelayQueue. Vă permite să setați ora înainte de începerea unei operații asincrone.

ScheduledFuture<V>- o interfață de marcare care combină interfețele Viitorul și Întârziat.

RunnableScheduledFuture<V>- o interfață care combină RunnableFuture și ScheduledFuture. În plus, puteți specifica dacă sarcina este o sarcină unică sau ar trebui să fie executată la o frecvență specificată.