मैं अपने आवेदन में अनुसूचितExecutorService का उपयोग करता हूं। मुझे नियत थ्रेड चलाने के लिए समय-समय पर उपयोगिता वर्ग में इसका उपयोग करने की आवश्यकता है।अनुसूचितExecutorService: जब शटडाउन का आह्वान किया जाना चाहिए?
क्या यह स्थिर क्षेत्र में अनुसूचितExecutorService पकड़ने के लिए एक अच्छा डिज़ाइन है? क्या इस तरह के मामले में ScheduledExecutorService.shutdown() को आमंत्रित करना आवश्यक है? अगर मैं शटडाउन का आह्वान नहीं करता तो जोखिम क्या है?
है यही कारण है कि मैं क्या करने के लिए सोचा क्या:
private static ScheduledExecutorService exec = Executors.newScheduledThreadPool(5);
public void scheduleTask(String name) {
Future<?> future = futuresMapping.get(name);
if(future!=null && !future.isDone())
future.cancel(true);
//execute once
Future<?> f = scheduledExecutor.schedule(new MyTask()), 1, TimeUnit.MINUTES);
futuresMapping.put(name, f);
}
धन्यवाद
मैंने schedExecutor.shutdownNow() जोड़ने की कोशिश की; मेरे ServletContextListener में, लेकिन मुझे टॉमकैट लॉग में एक त्रुटि मिली है, "वेब एप्लिकेशन [/ servlet] ने [टाइमर -0] नामक धागा शुरू किया है, लेकिन इसे रोकने में विफल रहा है। यह मेमोरी रिसाव बनाने की संभावना है। "। मैं इस त्रुटि से कैसे बच सकता हूं? मदद के लिए धन्यवाद – lili
शटडाउन अब() गैर अवरोधक कॉल है जो तुरंत वापस आ जाएगा। आपको इसके बाद awaitTermination() को कॉल करना चाहिए जो वास्तव में थ्रेड पूल तक अवरुद्ध हो जाएगा। – maximdim
मैंने कोशिश की, यह काम नहीं किया। क्या मुझे 30 सेकंड से अधिक समय तक इंतजार करना चाहिए? मैंने http://stackoverflow.com/questions/9930624/tomcat7-and-scheduledexecutorservice-shutdownnow धन्यवाद में अधिक जानकारी लिखी – lili