का उपयोग कर जावा में एक निश्चित आकार थ्रेड पूल बनाने का इष्टतम तरीका मैं बहु-थ्रेडेड एप्लिकेशन के लिए थ्रेड पूल बनाने के लिए जावा में Executors
फ्रेमवर्क का उपयोग कर रहा हूं, और मेरे पास प्रदर्शन से संबंधित एक प्रश्न है।एक्जिक्यूटर्स सेवा
मेरे पास एक ऐसा एप्लिकेशन है जो रीयलटाइम या गैर-रीयलटाइम मोड में काम कर सकता है। मामले में यह वास्तविक समय है, मैं बस निम्नलिखित उपयोग कर रहा हूँ:
THREAD_POOL = Executors.newCachedThreadPool();
लेकिन मामले में यह वास्तविक समय नहीं है, मैं अपने थ्रेड पूल के आकार नियंत्रित करने की क्षमता चाहते हैं। ऐसा करने के लिए, मैं 2 विकल्पों के बारे में सोच रहा हूं, लेकिन मैं वास्तव में अंतर को समझ नहीं पा रहा हूं, और कौन सा बेहतर प्रदर्शन करेगा।
THREAD_POOL = Executors.newFixedThreadPool(threadPoolSize);
विकल्प 2 मेरे अपने ThreadPoolExecutor
इस तरह बनाने के लिए है:
विकल्प 1 आसान तरीका उपयोग करने के लिए है
RejectedExecutionHandler rejectHandler = new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
try {
executor.getQueue().put(r);
} catch (Exception e) {}
}
};
THREAD_POOL = new ThreadPoolExecutor(threadPoolSize, threadPoolSize, 0, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(10000), rejectHandler);
मैं समझने के लिए उपयोग करने का लाभ है चाहते हैं अधिक जटिल विकल्प 2, और अगर मुझे LinkedBlockingQueue
से अधिक डेटा संरचना का उपयोग करना चाहिए? किसी भी सहायता की सराहना की जाएगी।
है 'RejectedExecutionHandler' वास्तव में ब्लॉक कर रहा है,' executor.getQueue() करने के लिए कॉल डाल (आर), 'जब तक कतार मिल जाता है को अवरुद्ध कर देगा, इसलिए। अंत में मेरे हैंडलर किसी भी कार्य को निरस्त किए बिना एक बाध्य कतार रखने की अनुमति देता है। जब तक मैं गलत नहीं हूँ। अन्य विवरण के लिए +1। –
@CharlesMenguy: स्पष्टीकरण के लिए धन्यवाद, मेरा बुरा, मैं अपना प्रश्न अपडेट करूंगा। लेकिन आप 'अस्वीकृत निष्पादन हैंडलर' के अंदर अवरुद्ध करके क्या हासिल करना चाहते हैं? मेरा मानना है कि इसमें कुछ वास्तव में अप्रत्याशित दुष्प्रभाव हो सकते हैं जैसे कॉलर थ्रेड को अवरुद्ध करना। शायद आपको 'कॉलररंस पॉलिसी' की आवश्यकता है? –
असल में इसे देखने के बाद, 'कॉलररंस पॉलिसी' वास्तव में जो मैं करना चाहता हूं उसके लिए वादा करता हूं, मैं इसे धन्यवाद देने का प्रयास करूंगा! शायद आप इसे उत्तर में जोड़ सकते हैं और मैं आपका जवाब स्वीकार करूंगा। –