के बीच एक कार्य आइटम पास करना मेरे पास दो धागे हैं। निर्माता डेटा के टुकड़े (स्ट्रिंग ऑब्जेक्ट्स) का उत्पादन कर रहा है, जहां उपभोक्ता इन तारों को संसाधित करता है। पकड़ यह है कि मेरे आवेदन को संसाधित होने के लिए केवल हालिया डेटा ऑब्जेक्ट की आवश्यकता है। दूसरे शब्दों में, यदि निर्माता दो स्ट्रिंग्स "एस 1" और फिर "एस 2" का उत्पादन करने में कामयाब रहा तो मैं चाहता हूं कि उपभोक्ता केवल "एस 2" को संसाधित करे। "एस 1" सुरक्षित रूप से त्याग दिया जा सकता है।धागे (जावा)
बेशक इस वर्ग को समझने वाली कक्षा को लागू करने में कोई समस्या नहीं है, लेकिन मैं java.util.concurrent (यदि ऐसा तंत्र मौजूद है) से मानक तंत्र का उपयोग करना चाहता हूं। ध्यान दें कि सिंक्रोनस क्यूई एक अच्छा समाधान नहीं है: उपभोक्ता "एस 1" को घेरते समय ब्लॉक करेगा और "एस 2" उत्पादन करने का मौका नहीं मिलेगा।
कोई भी विचार (संक्षेप में, मैं एक एकल तत्व संग्रह के लिए एक अवरुद्ध आपरेशन को हटाने और एक गैर अवरुद्ध सेट संचालन के साथ देख रहा हूँ)?
क्या वास्तव में दौड़ की स्थिति है? मुझे लगता है कि ArrayBlockingQueue के अंदर ReentrantLock उनसे बचने के लिए है। –
@Errandir - जिस दौड़ की स्थिति का मैं जिक्र कर रहा था वह था जब कतार पर प्रतीक्षा करने वाला कोई तत्व रहा था, और उपभोक्ता उस तत्व को लेता है जब निर्माता एक नया तत्व जोड़ता है। यह एक बेहतर अवधि की कमी के लिए है, एक "मैक्रो रेस" जो आपके द्वारा उपयोग की जाने वाली किसी भी डेटा संरचना के बाहर होती है। – kdgregory