मैं ThreadPoolExecutor का उपयोग करके कई कार्यों को निष्पादित करने का प्रयास कर रहा हूं। नीचे एक काल्पनिक उदाहरण है:कतार पूर्ण होने पर ThreadPoolExecutor ब्लॉक?
def workQueue = new ArrayBlockingQueue<Runnable>(3, false)
def threadPoolExecutor = new ThreadPoolExecutor(3, 3, 1L, TimeUnit.HOURS, workQueue)
for(int i = 0; i < 100000; i++)
threadPoolExecutor.execute(runnable)
समस्या यह है कि मैं जल्दी से एक java.util.concurrent.RejectedExecutionException पाने के बाद से कार्यों की संख्या काम कतार के आकार से अधिक है। हालांकि, वांछित व्यवहार जो मैं खोज रहा हूं वह मुख्य धागा ब्लॉक है जब तक कि कतार में कमरा न हो। इसे निष्पादित करने का श्रेष्ठ तरीका क्या है?
इस प्रश्न पर एक नज़र डालें: http://stackoverflow.com/questions/2001086/how-to-make-threadpoolexecutors-submit-method-block-if-it-is-saturated – Kiril
[यह उत्तर] (http : //stackoverflow.com/a/4522411/394431) एक अन्य प्रश्न के लिए एक कस्टम 'अवरुद्ध क्यूई' उपclass का उपयोग करने का सुझाव देता है जो 'put()' को प्रस्तुत करके 'प्रस्ताव()' पर ब्लॉक करता है। मुझे लगता है कि 'अस्वीकृत निष्पादन हैंडलर' के रूप में उतना ही कम काम करना समाप्त होता है जो 'getQueue() डालता है()। –
सीधे कतार में डालना गलत होगा, जैसा कि इस उत्तर में बताया गया है http://stackoverflow.com/a/3518588/585903 –