एक्झिक्युटर

एक्झिक्युटर हा वर्गांसाठी बेस इंटरफेस आहे जो रन करण्यायोग्य टास्क लाँच करतो. हे कार्य जोडण्यास आणि ते कसे सुरू करावे यासाठी मदत प्रदान करते.

ExecutorService हा एक इंटरफेस आहे जो एक्झिक्युटरच्या गुणधर्मांचा विस्तार करतो आणि जो रन करण्यायोग्य किंवा कॉल करण्यायोग्य कार्यांसाठी सेवेचे वर्णन करतो. सबमिट करण्याच्या पद्धती कॉल करण्यायोग्य किंवा रन करण्यायोग्य स्वरूपात इनपुट म्हणून कार्य स्वीकारतातआणि भविष्यात रिटर्न व्हॅल्यू म्हणून वापरले जाते, ज्याद्वारे तुम्हाला परिणाम मिळू शकतो.

invokeAll पद्धत कार्ये कार्यान्वित करण्यासाठी, त्यांच्या स्थितीसह आणि पूर्ण होण्याच्या परिणामांसह कार्यांची सूची परत करण्यासाठी जबाबदार आहे.

invokeAny पद्धत कार्ये कार्यान्वित करण्यासाठी, यशस्वीरित्या पूर्ण केलेल्या कार्याचा परिणाम परत करण्यासाठी (म्हणजे, अपवाद न ठेवता) जबाबदार आहे, जर असेल तर.

ScheduledExecutorService - हा इंटरफेस प्रलंबित कार्ये विशिष्ट विलंबाने किंवा ठराविक कालावधीसह चालविण्याची क्षमता जोडतो.

AbstractExecutorService हा ExecutorService 'a ' बांधण्यासाठी एक अमूर्त वर्ग आहे. आत सबमिट , invokeAll , invokeAny पद्धतीची अंमलबजावणी आहे. या वर्गाला ThreadPoolExecutor , ScheduledThreadPoolExecutor आणि ForkJoinPool वारसा मिळतो .

public static void main(String[] args) {
   ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
   Callable<String> task = () -> {
       System.out.println(Thread.currentThread().getName());
       return Thread.currentThread().getName();
   };
   scheduledExecutorService.schedule(task, 10, TimeUnit.SECONDS);
   scheduledExecutorService.shutdown();
}

ThreadPoolExecutor

एक्झिक्युटर्स हा ThreadPoolExecutor , ScheduledThreadPoolExecutor तयार करण्यासाठी एक कारखाना वर्ग आहे. जर तुम्हाला यापैकी एखादा पूल तयार करायचा असेल, तर हा कारखाना तुम्हाला हवा तसाच आहे. यामध्ये रन करण्यायोग्य-कॉल करण्यायोग्य, प्रिव्हिलेज्डअॅक्शन-कॉल करण्यायोग्य, प्रिव्हिलेज्डएक्सेप्शनअॅक्शन-कॉल करण्यायोग्य आणि इतर भिन्न अडॅप्टर आहेत. भिन्न थ्रेडपूल तयार करण्यासाठी स्थिर पद्धती आहेत.

ThreadPoolExecutor - Executor आणि ExecutorService इंटरफेसची अंमलबजावणी करते आणि टास्क एक्झिक्युशनपासून टास्क क्रिएशन वेगळे करते. आम्हाला रन करण्यायोग्य ऑब्जेक्ट्स अंमलात आणणे आणि त्यांना एक्झिक्यूटरकडे पाठवणे आवश्यक आहे आणि थ्रेडपूलएक्सिक्युटर त्यांच्या अंमलबजावणीसाठी, इन्स्टंटेशनसाठी आणि थ्रेडसह कार्य करण्यासाठी जबाबदार आहे.

ScheduledThreadPoolExecutor - ThreadPoolExecutor पद्धतींव्यतिरिक्त, ते थ्रेड्सचा एक पूल तयार करते जे दिलेल्या विलंबानंतर किंवा नियतकालिक अंमलबजावणीसाठी कमांड्स शेड्यूल करू शकतात.

थ्रेडफॅक्टरीमागणीनुसार नवीन धागे तयार करणारी वस्तू आहे. आम्हाला Executors.newSingleThreadExecutor(ThreadFactory threadFactory) पद्धतीला एक उदाहरण देणे आवश्यक आहे .

ExecutorService executorService = Executors.newSingleThreadExecutor(new ThreadFactory() {
 @Override public Thread newThread(Runnable r) {
Thread thread = new Thread(r, "MyThread");
thread.setPriority(Thread.MAX_PRIORITY);
 return thread; }
 });

RejectedExecutionHandler - काही कारणास्तव ThreadPoolExecutor द्वारे कार्यान्वित होऊ शकत नाही अशा कार्यांसाठी तुम्हाला हँडलर परिभाषित करण्याची परवानगी देते. जेव्हा कोणतेही विनामूल्य प्रवाह नसतात किंवा सेवा बंद किंवा बंद असते तेव्हा असे होते.

ThreadPoolExecutor वर्गात अनेक मानक अंमलबजावणी आढळतात :

  • CallerRunsPolicy - कॉलिंग थ्रेडवर कार्य चालवते;
  • AbortPolicy - अपवाद फेकते;
  • DiscardPolicy - कार्याकडे दुर्लक्ष करते;
  • DiscardOldestPolicy - रांगेतून सर्वात जुने सुरू न केलेले कार्य काढून टाकते, नंतर पुन्हा नवीन कार्य जोडण्याचा प्रयत्न करते.

पूर्णता सेवा

CompletionService हा एक सेवा इंटरफेस आहे ज्यामध्ये एसिंक्रोनस टास्क लाँच करणे आणि परिणाम मिळवणे डीकपलिंग आहे. कार्ये जोडण्यासाठी, एक सबमिटपद्धतआणि आधीच पूर्ण झालेल्या कार्यांचे निकाल मिळविण्यासाठी, ब्लॉकिंगटेकआणि नॉन-ब्लॉकिंगपोल.

ExecutorCompletionService हे एक्झिक्युटर इंटरफेस , जसे की ThreadPoolExecutor किंवा ForkJoinPool लागू करणार्‍या कोणत्याही वर्गावर एक आवरण आहे. जेव्हा कार्ये लॉन्च करण्याच्या आणि त्यांच्या अंमलबजावणीवर नियंत्रण ठेवण्याच्या पद्धतीपासून अमूर्त करणे आवश्यक असते तेव्हा ते वापरले जाते.

पूर्ण कार्ये असल्यास, आम्ही त्यांना बाहेर काढतो. जर कोणतीही कार्ये नसतील, तर आपण काहीतरी पूर्ण होईपर्यंत थांबतो. सेवा त्याच्या मूळ भागामध्ये LinkedBlockingQueue वापरते, परंतु तुम्ही कोणत्याही BlockingQueue अंमलबजावणीमध्ये पास करू शकता.