ConcurrentLinkedQueue के साथ काम करते समय, मैं कतार के आकार को कैसे सीमित कर सकता हूं। क्या यह संभव है कि यह बहिष्कार अपवाद के माध्यम से होगा?ConcurrentLinkedQueue <T> आउटफमेमरी अपवाद
6
A
उत्तर
5
ConcurrentLinkedQueue
का आकार असंबद्ध है, इसलिए यदि उत्पादक उपभोक्ताओं की तुलना में तेज़ी से आइटम डाल रहे हैं तो उन्हें हटा सकते हैं, अंततः यह आपकी याददाश्त को खाएगा। यदि आप कतार के आकार को सीमित करना चाहते हैं, तो इसके बजाय LinkedBlockingQueue
या ArrayBlockingQueue
जैसे अवरुद्ध कतार का प्रयास करें। पहले का आकार वैकल्पिक रूप से बाध्य किया जा सकता है, जबकि दूसरा हमेशा बाध्य होता है।
0
मैं इस पर थोड़ा देर हो चुकी हूं, लेकिन आप हमेशा ऊपरी बाउंड सेट कर सकते हैं और जब पार हो जाएंगे, तो आपकी विधि अगले एक के लिए जगह बनाने के लिए एक टोकन का उपभोग करेगी।
आपके उत्तर के लिए धन्यवाद, हालांकि, मैं समवर्ती होने के बाद ConcurrentLinkedQueue का उपयोग करता हूं, क्या आप असंगत कक्षाओं का सुझाव दे रहे हैं जिनके लिए इन चरों तक पहुंचने पर मुझे सिंक्रनाइज़ेशन जोड़ने की आवश्यकता होगी? – Youval
@Youval, सभी 'अवरुद्ध क्यूई' कार्यान्वयन थ्रेड-सुरक्षित हैं, जैसा कि [एपीआई दस्तावेज़] में घोषित किया गया है (http://download.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html)। –
हालांकि थ्रेड को अवरुद्ध करना अत्यधिक समवर्ती अनुप्रयोगों में समग्र अनुप्रयोग प्रदर्शन को प्रभावित कर सकता है। तो विपक्ष और पेशेवर हैं। –