मैंने चारों ओर देखा है लेकिन मुझे कोई जवाब नहीं मिला है इसलिए मैं निश्चित रूप से इसकी पुष्टि करना चाहता था।जावा थ्रेड पूल/निष्पादक सेवा और प्रतीक्षा() एस - धागे और कार्य कतार के साथ क्या होता है?
pool.execute(new Runnable(){
try{
Object waitForMe = doSomethingAndGetObjectToWaitFor();
waitForMe.wait();
doSomethingElse();
}catch(Exception e){ throw new RunTimeException(e) }
});
को लगता है कि इसके बाद के संस्करण कोड में कुछ 100 बार कहा जाता है की सुविधा देता है: ExecutorService pool = Executors.newFixedThreadPool(5);
और मैं कुछ कोड है -
मैं एक निश्चित आकार थ्रेड पूल है कहो। पूल में केवल 5 धागे हैं (इसलिए उपरोक्त में से केवल 5 बयान एक बिंदु पर लाइव होना चाहिए)। यह भी मान लें कि wait()
किसी ऑब्जेक्ट पर कुछ I/O कॉल को एक थर्ड पार्टी में कर रहा है और ऑपरेशन पूरा होने पर कॉलबैक की प्रतीक्षा कर रहा है, इसलिए इसे स्वाभाविक रूप से पूरा करने में कुछ समय लगेगा।
अब मेरा प्रश्न यह है कि इन कार्यों में से एक wait()
तक पहुंचने पर व्यवहार क्या होता है, क्या कार्य सो जाता है और फिर थ्रेड पूल से धागा कतार से एक और कार्य लेता है और इसे चलाने शुरू करता है?
यदि काम करने का कार्य सो रहा है तो क्या होता है जब यह notify()
प्राप्त होता है और उठता है? क्या थ्रेड थ्रेड पूल के लिए कतार में (सामने या पीछे) वापस जाता है और तब तक प्रतीक्षा करता है जब तक कि 5 धागे में से कोई भी इसे निष्पादित नहीं कर सकता (यानी doSomethingelse()
पर कॉल करें)? या जो धागा इसे निष्पादित कर रहा था वह भी सो जाता है यानी 5 निष्पादक धागे में से एक कार्य के साथ इंतजार कर रहा है (यही वह है जो मैं मान रहा हूं)? या क्या निष्पादक थ्रेड एक और कार्य उठाता है और जब पहला कार्य प्रतीक्षा() से वापस आता है तो बस बाधित हो जाता है?
महान उत्तर के लिए धन्यवाद! कॉलबैक विकल्प के साथ, टाइमआउट सेट करने के बारे में जाने का सबसे अच्छा तरीका क्या होगा (अगर कोई त्रुटि नहीं फेंकती है तो कॉलबैक के लिए एक्स सेकेंड का इंतजार करना चाहते हैं)। एकमात्र तरीका मैं सोच सकता हूं कि वर्तमान सिस्टम मिलीसेक्स का नोट लेना और उसे एक सूची में रखना है और एक और धागा कॉल के लिए सूची की निगरानी करता है जो वर्तमान समय से अधिक है और एक त्रुटि ट्रिगर करता है। मुझे एक अच्छी किताब मिलनी है जो समेकन, कॉलबैक इत्यादि से संबंधित है। धन्यवाद! – NightWolf
@ नाइटवॉल्फ: टाइमआउट पर wrt मेरा अद्यतन उत्तर देखें। जब एक अच्छी किताब की बात आती है, [प्रैक्टिस में जावा कंसुरेंसी] (http://www.amazon.com/Java-Concurrency- अभ्यास- ब्रायन-Goetz/dp/0321349601) एक जरूरी है। –
अद्यतन और पुस्तक लिंक, अच्छा विचार के लिए धन्यवाद ढेर। अफसोस की बात है कि मेरे पास तीसरे पक्ष के पक्ष में कोई नियंत्रण नहीं है। – NightWolf