Pelaksana, PelaksanaLayanan, Pelaksana - 1

"Halo, Amigo!"

"Ora ana sing sampurna nalika pisanan digawe. Semono uga ing thread. Ing wektu, pangripta Jawa dadi yakin karo kekurangan antarmuka Runnable. Ora ndhukung pangecualian mbuwang lan ora bisa ngerteni asil saka nglakokake tugas… "

"Antarmuka Runnable luwih cocok kanggo tugas independen gedhe tinimbang subtasks cilik sing pengin mbukak rolas ing wektu, banjur ngumpulake asil."

"Mulane antarmuka Callable diciptakake. Iku luwih cocog kanggo eksekusi paralel tugas cilik tinimbang Runnable lan Thread, sebagian amarga antarmuka umum."

"Iki implementasine khas antarmuka:"

Tuladha
class ReverseString implements Callable<String>
{
 String str;

 ReverseString(String str)
 {
  this.str = str;
 }

 public String call() throws Exception
 {
  StringBuilder builder = new StringBuilder(str);
  builder.reverse();
  return builder.toString();
 }
}

"Boten kados Runnable , ing kene kita kudu ngilangi cara telpon, sing ngasilake asil saka jinis sing ditemtokake dening jinis argumen. Pendekatan iki luwih trep tinimbang metode run antarmuka Runnable, sing ngasilake ora sah. Kadhangkala pangembang kudu teka karo macem-macem solusi kanggo entuk asil thread."

"Aku weruh."

"Lan saiki deleng carane Callable bisa kerja bareng karo ThreadPoolExecutor:

"Kaping pisanan, cara ngirim kelas ThreadPoolExecutor ngasilake obyek Future parameterized. Sampeyan bisa nggunakake obyek iki kanggo mangerteni apa tugas wis rampung lan kanggo entuk asil."

"Iki cara kerjane:"

Tuladha
// 1. Create a ThreadPoolExecutor
ExecutorService service = Executors.newFixedThreadPool(5);

// 2. Add a task to it
Future<String> task = service.submit(new ReverseString("Amigo"));

// 3. Wait until the task is done
while(!task.isDone())
{
 Thread.sleep(1);
}

// 4. Try to get the result
//We will get either the result, or an exception if one occurred while the task was being executed
try
{
 System.out.println("Full string : " + task.get());
}
catch (Exception ie)
{
 ie.printStackTrace(System.err);
}
  
// 5. Stop the ThreadPool.
service.shutdown();

"Adoh! Aku utamané seneng kelas Future. Apa cara sing duwe?"

"Iki sing paling menarik:"

Metode Katrangan
boolean cancel(boolean mayInterrupt);
Mungkasi tugas.
boolean isCancelled();
Ngasilake bener yen tugas wis mandheg.
boolean isDone();
Ngasilake bener yen tugas wis rampung dieksekusi.
V get() throws InterruptedException, ExecutionException;
Ngasilake asil saka cara telpon utawa mbuwang pangecualian yen ana.

"Keren! Dadi sampeyan uga bisa mungkasi tugas."

"Aja ngandelake iki banget-ora saben utas bisa mandheg. Nanging yen tugas isih ana ing antrian, iki bakal bisa digunakake kanthi becik."

"Aku seneng pendekatan iki. Iku luwih trep tinimbang nggawe Utas dhewe lan banjur nyoba kanggo narik asil metu saka wong-wong mau."

"Apik. Ing kono kita bakal mungkasi dina iki."