6.1 Mga bagay na maipapatupad

Kaya nakarating kami sa pinakamalaking bahagi ng package. Ilalarawan nito ang mga interface para sa pagpapatakbo ng mga asynchronous na gawain na may kakayahang makakuha ng mga resulta sa pamamagitan ng Future at Callable na mga interface, pati na rin ang mga serbisyo at pabrika para sa paglikha ng mga thread pool: ThreadPoolExecutor, ScheduledPoolExecutor, ForkJoinPool.

Para sa isang mas mahusay na pag-unawa, gumawa tayo ng kaunting agnas ng mga interface at klase.

6.2 Mga pagsasakatuparan ng mga maipapatupad na bagay

Future<V>ay isang magandang interface para sa pagkuha ng mga resulta ng isang asynchronous na operasyon. Ang pangunahing paraan dito ay ang get method, na humaharang sa kasalukuyang thread (may timeout o walang timeout) hanggang sa makumpleto ang isang asynchronous na operasyon sa isa pang thread. Mayroon ding mga karagdagang pamamaraan para sa pagkansela ng operasyon at pagsuri sa kasalukuyang katayuan. Ang klase ng FutureTask ay kadalasang ginagamit bilang isang pagpapatupad.

RunnableFuture<V>- kung ang Future ay isang interface para sa Client API, kung gayon ang RunnableFuture interface ay ginagamit na upang simulan ang asynchronous na bahagi. Ang matagumpay na pagkumpleto ng run() na pamamaraan ay nagtatapos sa asynchronous na operasyon at nagbibigay-daan sa mga resulta na makuha sa pamamagitan ng get method.

Callable<V>- Isang pinahabang analogue ng Runnable na interface para sa mga asynchronous na operasyon. Binibigyang-daan kang magbalik ng na-type na halaga at magtapon ng may check na exception. Kahit na ang interface na ito ay walang run() na pamamaraan, maraming java.util.concurrent na klase ang sumusuporta dito kasama ng Runnable.

FutureTask<V>— pagpapatupad ng Future/RunnableFuture interface. Ang isang asynchronous na operasyon ay kinuha bilang input sa isa sa mga constructor sa anyo ng Runnable o Callable na mga bagay. Ang FutureTask class mismo ay idinisenyo upang ilunsad sa isang worker thread, halimbawa, sa pamamagitan ng bagong Thread(task).start() o sa pamamagitan ng ThreadPoolExecutor. Ang mga resulta ng isang asynchronous na operasyon ay kinukuha sa pamamagitan ng get(...) method.

Delayed- ginagamit para sa mga asynchronous na gawain na dapat magsimula sa hinaharap, pati na rin sa DelayQueue. Binibigyang-daan kang magtakda ng oras bago magsimula ang isang asynchronous na operasyon.

ScheduledFuture<V>- isang marker interface na pinagsasama ang Future at Delayed interface.

RunnableScheduledFuture<V>- isang interface na pinagsasama ang RunnableFuture at ScheduledFuture. Bilang karagdagan, maaari mong tukuyin kung ang gawain ay isang beses na gawain o dapat na patakbuhin sa isang tinukoy na dalas.