मैं समझने की कोशिश कर रहा हूं कि जावा फिक्स्ड थ्रेडपूल अभ्यास में कैसे काम करता है, लेकिन दस्तावेज़ मेरे प्रश्न का उत्तर नहीं देते हैं।जावा फिक्स्ड थ्रेडपूल को समझना
की तरह एक साधारण परिदृश्य मान लें:
ExecutorService ES= Executors.newFixedThreadPool(3);
List<Future> FL;
for(int i=1;i<=200;i++){
FL.add(ES.submit(new Task()));
}
ES.shutdown();
जहां Task
एक Callable
जो कुछ संसाधनों का निर्माण होता है, उनका इस्तेमाल करता है, और कुछ उत्पादन देता है।
मेरा प्रश्न: कितने Task
for
पाश पूर्ण करने पर स्मृति में देखते हैं? दूसरे शब्दों में: क्या उनके संसाधनों का निर्माण करने के समय केवल 3 Task
होगा, या उनमें से सभी पहले से बनाए गए हैं, जैसे .submit
मेरे पास 200 Task
(और उनके संसाधन) निष्पादित करने की प्रतीक्षा कर रहे हैं?
नोट: संसाधनों निर्माण Task
के निर्माता में होता है, call()
विधि में नहीं।
जावाडोक (छोड़ के लिए निम्न के लिए स्वतंत्र महसूस) में: क्या मुझे confuses जावा डॉक्स
में निम्नलिखित विवरण एक धागा पूल कि धागे एक बंद ऑपरेटिंग की एक निश्चित संख्या पुनः उपयोग कर लेता बनाता है साझा unbounded कतार। किसी भी समय, अधिकांश nThreads धागे सक्रिय प्रोसेसिंग कार्य होंगे।
मुझे लगता है कि इसका मतलब है कि, मेरे उदाहरण में, सभी 200 कार्य कतार में हैं, लेकिन उनमें से केवल 3 को किसी भी समय निष्पादित किया जाता है।
किसी भी मदद की अत्यधिक सराहना की जाती है।
आप लूप के ठीक बाद हैं, पूल के कतार में 'कार्य' के 200 बनाए गए उदाहरण हैं, जो एक ही समय में 3 कार्य निष्पादित करता है। – alex2410
आपके प्रश्न का उत्तर नहीं दिया जा सकता है, क्योंकि यह अत्यधिक निर्भर करता है कि कब और कब कचरा कलेक्टर पूरा कार्य एकत्र करने के लिए किक करता है। – SpaceTrucker
fyi 'newFixedThreadPool (nThreads) 'नए थ्रेडपूल एक्स्सेलर (एन थ्रेड, एन थ्रेड्स, 0 एल, टाइमयूनिट। मिलिस्सेन्ड्स, नई लिंक्डब्लॉकिंग क्यूयू()) के लिए सिर्फ दृढ़ता विधि है;' –
for3st