எக்ஸிகியூட்டர், எக்ஸிகியூட்டர் சர்வீஸ், எக்ஸிகியூட்டர் - 1

"வணக்கம், அமிகோ!"

"முதன்முதலில் உருவாக்கப்படும் போது எதுவும் சரியாக இல்லை. திரிகளிலும் இதுவே உண்மை. காலப்போக்கில், ஜாவாவின் படைப்பாளிகள் இயங்கக்கூடிய இடைமுகத்தின் குறைபாடுகளை நம்பினர். இது விதிவிலக்குகளை வீசுவதை ஆதரிக்கவில்லை மற்றும் அதைக் கண்டுபிடிக்க முடியவில்லை. பணிகளைச் செய்வதன் விளைவு..."

"இயக்கக்கூடிய இடைமுகம், நீங்கள் ஒரு நேரத்தில் ஒரு டஜன் இயக்க விரும்பும் சிறிய துணைப் பணிகளை விட பெரிய சுயாதீனமான பணிகளுக்கு மிகவும் பொருத்தமானது, பின்னர் அவற்றின் முடிவுகளை சேகரிக்கிறது."

"அதனால்தான் அழைக்கக்கூடிய இடைமுகம் கண்டுபிடிக்கப்பட்டது. இது ரன்னபிள் மற்றும் த்ரெட்டை விட சிறிய பணிகளை இணையாகச் செயல்படுத்துவதற்கு மிகவும் பொருத்தமானது, ஏனெனில் இது ஒரு பொதுவான இடைமுகம்."

"இடைமுகத்தின் வழக்கமான செயலாக்கம் இங்கே:"

உதாரணமாக
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();
 }
}

" ரன்னபிள் போலல்லாமல், இங்கே நாம் அழைப்பு முறையை மேலெழுத வேண்டும், இது வகை வாதத்தால் குறிப்பிடப்பட்ட வகையின் முடிவை வழங்கும். இந்த அணுகுமுறை இயங்கக்கூடிய இடைமுகத்தின் ரன் முறையை விட மிகவும் வசதியானது, இது வெற்றிடத்தை அளிக்கிறது. சில நேரங்களில் டெவலப்பர்கள் அதைக் கொண்டு வர வேண்டும். ஒரு நூலின் முடிவைப் பெற பல்வேறு தீர்வுகள்."

"நான் பார்க்கிறேன்."

"இப்போது த்ரெட்பூல் எக்சிகுட்டருடன் எப்படி Callable இணைந்து செயல்பட முடியும் என்பதைப் பாருங்கள்:

"முதலில், ThreadPoolExecutor வகுப்பின் சமர்ப்பித்தல் முறையானது அளவுருக் கொண்ட எதிர்காலப் பொருளைத் தருகிறது. ஒரு பணி முடிந்ததா என்பதைக் கண்டறியவும், முடிவைப் பெறவும் இந்தப் பொருளைப் பயன்படுத்தலாம்."

"இது எப்படி வேலை செய்கிறது:"

உதாரணமாக
// 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();

"தொலைவில்! நான் குறிப்பாக எதிர்கால வகுப்பை விரும்புகிறேன். அதில் என்ன முறைகள் உள்ளன?"

"இங்கே மிகவும் சுவாரஸ்யமானவை:"

முறை விளக்கம்
boolean cancel(boolean mayInterrupt);
பணியை நிறுத்துகிறது.
boolean isCancelled();
பணி நிறுத்தப்பட்டால் உண்மை எனத் திரும்பும்.
boolean isDone();
பணி முடிந்தால் உண்மை எனத் திரும்பும்.
V get() throws InterruptedException, ExecutionException;
அழைப்பு முறையின் முடிவை வழங்கும் அல்லது ஏதேனும் நடந்தால் விதிவிலக்கு அளிக்கும்.

"கூல்! எனவே நீங்கள் பணிகளை நிறுத்தலாம்."

"இதை அதிகம் நம்ப வேண்டாம்-ஒவ்வொரு நூலையும் நிறுத்த முடியாது. ஆனால் ஒரு பணி இன்னும் வரிசையில் இருந்தால், இது நன்றாக வேலை செய்யும்."

"நான் இந்த அணுகுமுறையை விரும்புகிறேன். நூல்களை நீங்களே உருவாக்கி, பின்னர் அதிலிருந்து ஒரு முடிவை எடுக்க முயற்சிப்பதை விட இது மிகவும் வசதியானது."

"அருமை. இன்னைக்கு அங்கேதான் முடிப்போம்."