हमारे बहुत सारे कोड विरासत हैं लेकिन हम "बिग डेटा" बैक एंड के लिए आगे बढ़ रहे हैं और मैं नवीनतम एपीआई कॉल का प्रचार करने की कोशिश कर रहा हूं, नवीनतम स्प्रिंग लाइब्रेरी आदि के उपयोग को प्रोत्साहित करता हूं। हमारी समस्याओं में से एक आवेदन है परत आईडी पीढ़ी। कारणों से मुझे समझ में नहीं आता है, एक उच्च प्राधिकरण अनुक्रमिक BigInteger चाहता है। मैं उन्हें फिर से उत्पन्न करने के साथ यादृच्छिक बना देता और विफल प्रविष्टियों पर पुनः प्रयास करता था लेकिन मुझे vetoed मिल गया।एक थ्रेड सुरक्षित तरीके से BigInteger को सुरक्षित रूप से बढ़ाना संभव है, शायद परमाणु संदर्भ के साथ, w/o लॉकिंग?
एक तरफ झुकाव, मैं ऐसी स्थिति में हूं जहां मुझे बढ़ने और थ्रेड में बिगइंटर प्राप्त करने की आवश्यकता है और इसे एक सुरक्षित और निष्पादक तरीके से करें। मैंने पहले कभी परमाणु संदर्भ का उपयोग नहीं किया है, लेकिन यह इस एप्लिकेशन के लिए बिल्कुल सही दिखता है। अभी हमारे पास एक सिंक्रनाइज़ कोड ब्लॉक है जो हमारे प्रदर्शन को बहुत बुरी तरह खराब करता है।
क्या यह सही तरीका है? सिंटेक्स उदाहरण?
मुझे यह उल्लेख करना चाहिए कि इस मॉड्यूल के तरीके के तरीके से, यह उपयोग करने के लिए मूल्यों की एक श्रृंखला को पकड़ने के लिए संग्रहीत प्रक्रिया का उपयोग कर डेटाबेस को हिट करता है। एक समय में हजारों लोग ताकि यह केवल 20 मिनट में हो सकता है। यह विभिन्न सर्वरों को एक-दूसरे पर कदम उठाने से रोकता है लेकिन यह बिगइंटर को मनमाने ढंग से बाद के मूल्य पर सेट करने की झुर्रियां भी जोड़ता है। बेशक, इसे थ्रेड सुरक्षित भी होना चाहिए।
पीएस मुझे अभी भी लगता है कि मेरी यादृच्छिक पीढ़ी का विचार यह सब थ्रेडिंग सामानों को संभालने से बेहतर है। एक बिगइंटर एक हास्यास्पद रूप से बड़ी संख्या है और कभी भी दो बार उत्पन्न करने की बाधाओं को शून्य के करीब होना चाहिए।
public final class AtomicBigInteger {
private final AtomicReference<BigInteger> valueHolder = new AtomicReference<>();
public AtomicBigInteger(BigInteger bigInteger) {
valueHolder.set(bigInteger);
}
public BigInteger incrementAndGet() {
for (; ;) {
BigInteger current = valueHolder.get();
BigInteger next = current.add(BigInteger.ONE);
if (valueHolder.compareAndSet(current, next)) {
return next;
}
}
}
}
यह मूल रूप से के लिए incrementAndGet()
'परमाणु संदर्भ' जैसा प्रतीत नहीं होता है यह आपके लिए लॉक किए बिना करता है। लेकिन जब तक आपको लंबे समय से अधिक पूर्णांक की आवश्यकता नहीं होती है, तो मुझे आश्चर्य होगा कि अगर बिगइंटरर आपको धीमा नहीं कर रहा था। 'परमाणु लोंग' के साथ जाने के लिए उन्हें मनाने की कोशिश करें। –
मैं उसमें देख लूंगा। भले ही, मैं अभी भी उत्तर के बारे में उत्सुकता से उत्सुक हूं। ;-) विशेष रूप से क्योंकि वे मुझे फिर से veto सकता है। राजनीति। – user447607
परमाणु संदर्भ (जैसे अन्य परमाणु .. वर्ग) लॉकिंग का उपयोग नहीं करते हैं। – bowmore