ExecutorService
खत्म करने के सभी कार्यों के लिए इंतजार करने का सबसे सरल तरीका क्या है ? मेरा काम मुख्य रूप से कम्प्यूटेशनल है, इसलिए मैं बस बड़ी संख्या में नौकरियां चलाना चाहता हूं - प्रत्येक कोर पर। अभी मेरा सेटअप इस तरह दिखता है:
ExecutorService es = Executors.newFixedThreadPool(2);
for (DataTable singleTable : uniquePhrases) {
es.execute(new ComputeDTask(singleTable));
}
try{
es.wait();
}
catch (InterruptedException e){
e.printStackTrace();
}
ComputeDTask
लागू करने योग्य। यह कार्यों को सही ढंग से निष्पादित करने के लिए प्रकट होता है, लेकिन कोड के wait()
साथ क्रैश हो जाता है IllegalMonitorStateException
। यह अजीब है, क्योंकि मैंने कुछ खिलौना उदाहरणों के साथ खेला और यह काम करने के लिए दिखाई दिया।
uniquePhrases
हजारों तत्वों के कई दसियों शामिल हैं। क्या मुझे दूसरी विधि का उपयोग करना चाहिए? मैं यथासंभव सरल कुछ ढूंढ रहा हूं
es
) को सिंक्रनाइज़ करने की आवश्यकता होती है जब आप इसके लिए इंतजार करना चाहते हैं - लॉक स्वचालित रूप से प्रतीक्षा करते समय जारी किया जाएगा