8

में साइक्लिकबैरियर को रीसेट करने के लिए जब मैं निम्नलिखित लिंक http://java-latte.blogspot.in/2013/10/cyclicbarrier-in-java-concurrency.html में CyclicBarrier पढ़ रहा था।जावा मल्टीथ्रेडिंग

उदाहरण 1 में, CyclicRaceDemo.java मुख्य विधि, CyclicBarrier रीसेट विधि बुला के बिना पुन: उपयोग किया जा रहा है।

मैंने उदाहरण चलाया और यह ठीक काम किया। तो, मैं सोच रहा हूं कि reset विधि का उपयोग क्या है। इसे कब कहा जाना चाहिए? या क्या हमें इसे बिल्कुल कॉल करने की ज़रूरत है?

उत्तर

11

CyclicBarrier चक्रीय है क्योंकि इसे रीसेट किए बिना पुन: उपयोग किया जा सकता है। Javadoc

एक तुल्यकालन सहायता है कि सभी के लिए धागे का एक सेट की अनुमति देता है से एक दूसरे को के लिए प्रतीक्षा एक आम बाधा बिंदु तक पहुँचने के। 0clकभी-कभी एक दूसरे के लिए प्रतीक्षा करने के लिए थ्रेड की एक निश्चित आकार वाली पार्टी से जुड़े कार्यक्रमों में साइक्लिक बार्बर्स उपयोगी हैं । बाधा को चक्रीय कहा जाता है क्योंकि प्रतीक्षा थ्रेड जारी होने के बाद इसे फिर से उपयोग किया जा सकता है।

तो सामान्य उपयोग में, एक बार सभी धागे एकत्र किए जाते हैं और बाधा टूट जाती है, यह स्वयं को रीसेट करता है और फिर से उपयोग किया जा सकता है।

Javadoc for reset()

पुनः निर्धारित करता है से

अपनी प्रारंभिक अवस्था में बाधा। यदि कोई भी पार्टियां वर्तमान में अवरोध पर प्रतीक्षा कर रही हैं, तो वे BrokenBarrierException के साथ वापस आ जाएंगे। ध्यान दें कि ब्रेकेज के बाद रीसेट हो गया है अन्य कारणों से जटिल होने के लिए जटिल हो सकता है; धागे को किसी अन्य तरीके से पुनः सिंक्रनाइज़ करने की आवश्यकता है, और रीसेट करने के लिए एक चुनें। इसके बाद उपयोग के लिए एक नया बाधा बनाने के लिए बेहतर हो सकता है।

तो reset किसी भी वर्तमान में प्रतीक्षा थ्रेड को BrokenBarrierException फेंकने और तुरंत जागने का कारण बनता है। reset का उपयोग तब किया जाता है जब आप बाधा को "तोड़ना" चाहते हैं।

नोट भी चेतावनी - एक बार धागे जबरन जागृत हो गए हैं, फिर से उन्हें सिंक्रनाइज़ करना मुश्किल है।

टीएल; डीआर: आपको सामान्य परिस्थितियों में reset() का उपयोग करने की आवश्यकता नहीं है।

+0

'tricky'' से आपका क्या मतलब है? यह वही शब्द है जो जावाडोक से आता है जिसे मैं समझ नहीं पा रहा हूं। क्या इसका मतलब यह है कि ब्रेकेज को संभालने के बीच में बाधा को फिर से सिंक्रनाइज़ करना मुश्किल होता है ('रीसेट() 'के कारण), तो कुछ अन्य धागे इसके पास आते हैं और ... बाधा मांगते हैं? – Leo

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