मूल रूप से मुझे सर्वर की ओर अस्थायी चैट संदेशों को संग्रहीत करने के लिए डेटा संरचना की आवश्यकता है। यह होना चाहिए:जावा समेकित गैर-अवरुद्ध बफर उच्च समवर्ती स्थिति
घिरा: क्योंकि मैं दुकान में बहुत ज्यादा संदेश की जरूरत नहीं है, ग्राहक नए संदेश हर दूसरे पाने के लिए अनुरोध भेज देंगे। मुझे लगता है कि बाध्य आकार अधिकतम होना चाहिए। एक सेकंड में समवर्ती अनुरोधों का माउंट। जब बफर भर जाता है, तो पुराने संदेश हटा दिए जाएंगे।
उच्च समवर्ती पहुंच के लिए उपयुक्त: मैं संग्रह संरचनाओं जैसे डेटा संरचना का उपयोग नहीं करना चाहता, क्योंकि पुनरावृत्ति के दौरान, यदि अन्य थ्रेड डेटा संरचना को बदलता है, उदा। एक संदेश जोड़ता है, यह एक अपवाद फेंक देगा, इसलिए मुझे पूरी डेटा संरचना को लॉक करना होगा, वास्तव में मुझे वास्तव में परवाह नहीं है कि क्लाइंट अनुरोध सबसे आखिरी डाला गया संदेश प्राप्त कर सकता है, क्योंकि वे एक सेकंड के बाद एक नया अनुरोध भेजेंगे, दूसरी तरफ लेखन ऑपरेशन कभी देरी नहीं होनी चाहिए। पैकेज java.util.concurrency के तहत कक्षाएं समाधान लगता है, लेकिन ...
गैर-अवरुद्ध: लिंक्डब्लॉकिंग क्यूयू, ऐरेब्लॉकिंग क्यूईयू उन्हें बाध्य किया जा सकता है और पुनरावृत्ति के दौरान अपवाद नहीं फेंक देगा, लेकिन वे सभी अवरुद्ध कतार हैं। जब कतार भर जाती है, तो मैं पूंछ में नया तत्व जोड़ना चाहता हूं और वहां से अवरुद्ध करने के बजाय पुराने तत्व को सिर से हटा देना चाहता हूं और किसी के लिए हेडर को हटाने का इंतजार करना चाहता हूं।
तो मेरा प्रश्न तीसरी लाइब्रेरी से कोई अच्छा कार्यान्वयन है? उदाहरण के लिए Google गुवा? या शायद आपके पास सर्वर पर अस्थायी चैट संदेश संग्रहीत करने के बारे में बेहतर विचार है?
आपको बहुत बहुत धन्यवाद!
आप अपाचे कॉमन्स [CircularFifoBuffer] (http://commons.apache.org/collections/apidocs/org/apache/commons/collections/buffer/CircularFifoBuffer.html) की एक सिंक्रनाइज़ संस्करण की कोशिश कर सकते। – Perception
आपके उत्तर के लिए धन्यवाद, वास्तव में परिपत्रफिफ़ोफर बिल्कुल वही है जो मुझे चाहिए। लेकिन यह बॉक्स से सिंक्रनाइज़ नहीं है, क्योंकि इसके दस्तावेज़ से पता चलता है, मुझे चाहिए: BufferUtils.synchronizedBuffer (नया परिपत्रफिफो बफर()); लेकिन मैंने BufferUtils के स्रोत कोड की जांच की, यह सिर्फ जेआरई संग्रह। सिंक्रनाइज़ XXXXX की तरह, प्रत्येक सार्वजनिक कार्यों में सिंक्रनाइज़ किए गए कीवर्ड को जोड़ता है, इस मामले में प्रदर्शन समस्याएं समान होती हैं। – cn1h
वैसे भी मुझे नहीं लगता कि बफर की क्षमता बहुत बड़ी होनी चाहिए। इसलिए यदि मैं पढ़ने के दौरान पूरी डेटा संरचना को लॉक करता हूं, तो यह भी एक बड़ी समस्या नहीं होनी चाहिए। मुझे लगता है कि आपका जवाब सही जवाब है, लेकिन मुझे नहीं पता कि इसे कैसे स्वीकार किया जाए। – cn1h