जहाँ तक मुझे पता है कि लिंक्ड सूची और सरणी दोनों बिना सीमा के बढ़ सकते हैं या मैं गलत हूं? लेकिन जब मैं documentation in the Executor Service से गुजर चुका हूं, तो मुझे यह दिखाई देता है:क्यों ArayBlockingQueue को एक बाध्य कतार कहा जाता है जबकि एक LinkedBlockingQueue को एक अवरुद्ध अवरुद्ध कतार कहा जाता है?
असंबद्ध कतार। एक unbounded कतार का उपयोग (उदाहरण के लिए पूर्वनिर्धारित क्षमता के बिना LinkedBlockingQueue) सभी कोरपूल आकार धागे व्यस्त होने पर कतार में प्रतीक्षा करने के लिए नए कार्यों का कारण बन जाएगा। इस प्रकार, CorePoolSize धागे से कहीं अधिक नहीं बनाया जाएगा। जब
LinkedBlockingQueue
एक परिभाषित क्षमता है (और maximumPoolSize की मूल्य इसलिए कोई असर नहीं होता है।)
तो Unbounded Queue
गुण परिवर्तन करता है?
और यह ArrayBlockingQueue
के लिए लिखा:
घिरा कतारों। एक बाध्य कतार (उदाहरण के लिए, एक ArrayBlockingQueue) सीमित अधिकतम पुल आकार के साथ उपयोग किए जाने पर संसाधन थकावट को रोकने में मदद करता है, लेकिन ट्यून और नियंत्रण करना अधिक कठिन हो सकता है। कतार आकार और अधिकतम पूल आकारों को एक-दूसरे के लिए बंद किया जा सकता है: का उपयोग करना बड़ी कतार और छोटे पूल सीपीयू उपयोग, ओएस संसाधन, और संदर्भ-स्विचिंग ओवरहेड को कम करता है, लेकिन कृत्रिम रूप से कम थ्रूपुट का कारण बन सकता है। यदि कार्य अक्सर अवरुद्ध होते हैं (उदाहरण के लिए यदि वे I/O बाध्य हैं), तो एक सिस्टम से अधिक थ्रेड के लिए समय निर्धारित करने में सक्षम हो सकता है, अन्यथा आप अनुमति देते हैं। छोटी कतारों के उपयोग के लिए आमतौर पर बड़े पूल आकार की आवश्यकता होती है, जो सीपीयू को व्यस्त रखता है लेकिन अस्वीकार्य शेड्यूलिंग ओवरहेड का सामना कर सकता है, जो थ्रूपुट भी कम करता है।
@Andrej सरणी के लिए हाँ मैं भ्रमित हूँ ArrayList है। स्पष्टीकरण के लिए धन्यवाद। बीटीडब्ल्यू एरेलीलिस्ट कैसे बढ़ता है जब इसे अंतर्निहित सरणी द्वारा समर्थित किया जाता है जो बढ़ नहीं सकता है? – Geek
जब इसे आकार बदलने की आवश्यकता होती है, तो 'ArrayList' एक नई, बड़ी सरणी आवंटित करता है और सभी तत्वों को उस नई सरणी में प्रतिलिपि बनाता है। –