2011-07-06 18 views
5

इसलिए मैं एक निर्माता/उपभोक्ता प्रकार के अनुप्रयोग में एक निश्चित आकार के ब्लॉकिंग क्यूयू [ऐरेब्लॉकिंग क्यूयू] का उपयोग कर रहा हूं, लेकिन मैं चाहता हूं कि उपयोगकर्ता फ्लाई पर कतार आकार को बदलने में सक्षम हो। समस्या यह है कि ब्लॉकिंगक्यूयू कार्यान्वयन नहीं है जो सृजन के बाद क्षमता बदलने की अनुमति देता है। कोई भी इससे पहले कभी आया है? कोई विचार?पुन: आकार देने योग्य जावा अवरोधक्यूयू

उत्तर

1

आप LinkedBlockingQueue का विस्तार कर सकते हैं। इसकी सीमा एक मुलायम सीमा है (यानी केवल एक अतिरिक्त जांच) और आप इसे कुछ बदल सकते हैं जिसे आप बदल सकते हैं (एक में निर्मित करने और स्वयं को डालने से)

+0

आंतरिक कोड के बहुत सारे प्रतिलिपि/पेस्ट किए बिना यह संभव नहीं है। आपको वास्तव में एक अलग कार्यान्वयन के लिए एक चेनस लेना होगा, उदाहरण के लिए, अपाचे हार्मनी में से एक। – jbellis

+0

@jbellis आपको उप-वर्ग में कोड कॉपी करने की आवश्यकता क्यों होगी? –

+3

आप उपclassing द्वारा वांछित कार्यक्षमता यहां प्राप्त नहीं कर सकते हैं; बहुत अधिक अंतिम/निजी है। – jbellis

2

सबसे स्पष्ट समाधान (हो सकता है या नहीं हो सकता है आपकी परिस्थितियों के आधार पर उपयुक्त) आपको अपडेट की गई क्षमता के साथ नया कतार तुरंत चालू करना होगा। फिर पुरानी कतार से नई कतार में सबकुछ दबाएं।

+0

यदि आप ऐसा करते हैं, तो पुरानी कतार के संदर्भ वाले सभी धागे को नई कतार पर नई सामग्री के बजाय पुरानी कतार पर नई सामग्री के लिए अवरुद्ध कर दिया जाएगा। –

+1

@ बेकेल: यही कारण है कि मैंने कहा "आपकी परिस्थितियों के आधार पर।" यदि ओपी में अवरुद्ध कतार के कई संदर्भ हैं, तो उसे इस समाधान को काम करने के लिए रिफैक्टर करने की आवश्यकता होगी (उदाहरण के लिए, कतार को स्वयं एक कंटेनर ऑब्जेक्ट में लपेटकर जो कतार के रूप में कार्य करता है लेकिन क्षमता के दौरान आंतरिक रूप से नए आवंटन करता है बदला हुआ)। –

संबंधित मुद्दे