Tagapagpatupad, TagapatupadSerbisyo, Tagapagpatupad - 1

"Hi, Amigo!"

"Walang perpekto noong una itong nilikha. Ganoon din sa mga thread. Nang maglaon, nakumbinsi ang mga tagalikha ng Java sa mga pagkukulang ng interface ng Runnable. Hindi nito sinusuportahan ang mga pagbubukod sa paghagis at hindi naging posible na malaman ang resulta ng pagsasagawa ng mga gawain…"

"Ang Runnable na interface ay mas angkop para sa malalaking independiyenteng mga gawain kaysa sa maliliit na subtask na gusto mong patakbuhin ng isang dosena sa isang pagkakataon, at pagkatapos ay kolektahin ang kanilang mga resulta."

"Iyon ang dahilan kung bakit naimbento ang Callable interface. Ito ay mas angkop para sa parallel na pagpapatupad ng maliliit na gawain kaysa sa Runnable at Thread, sa bahagi dahil ito ay isang generic na interface."

"Narito ang isang karaniwang pagpapatupad ng interface:"

Halimbawa
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();
 }
}

"Hindi tulad ng Runnable , dito kailangan nating i-override ang paraan ng pagtawag, na nagbabalik ng resulta ng uri na tinukoy ng uri ng argument. iba't ibang mga paraan upang makakuha ng resulta ng isang thread."

"Nakita ko."

"At ngayon tingnan kung paano maaaring gumana ang Callable kasama ng ThreadPoolExecutor:

"Una, ang paraan ng pagsusumite ng klase ng ThreadPoolExecutor ay nagbabalik ng isang naka-parameter na bagay sa Hinaharap. Magagamit mo ang bagay na ito upang malaman kung ang isang gawain kung tapos na at upang makuha ang resulta."

"Narito kung paano ito gumagana:"

Halimbawa
// 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();

"Far out! Gusto ko lalo na ang Future class. Anong mga pamamaraan ang mayroon ito?"

"Narito ang pinaka-kawili-wili:"

Pamamaraan Paglalarawan
boolean cancel(boolean mayInterrupt);
Pinipigilan ang gawain.
boolean isCancelled();
Nagbabalik ng true kung itinigil ang gawain.
boolean isDone();
Nagbabalik ng true kung ang gawain ay tapos na sa pagpapatupad.
V get() throws InterruptedException, ExecutionException;
Ibinabalik ang resulta ng paraan ng pagtawag o naghagis ng exception kung may nangyari.

"Cool! Para matigil ka rin sa mga gawain."

"Huwag masyadong umasa dito—hindi lahat ng thread ay maaaring huminto. Ngunit kung ang isang gawain ay nasa pila pa rin, ito ay gagana nang maayos."

"Gusto ko ang diskarteng ito.

"Great. Doon tayo magtatapos ngayon."