2011-07-06 16 views
5

मैं एक कस्टम जावा बाधा लागू करना चाहता हूं। मैं CyclicBarrier class का उपयोग नहीं करना चाहता हूं।कस्टम जावा बाधा लागू

तो सभी धागे एक आम बिंदु पर मिलते हैं। धागे केवल तभी आगे बढ़ते हैं जब सभी धागे बाधा पर पहुंचे।

मैं प्रतीक्षा/सूचना/सूचना का उपयोग करना चाहता हूं बाधा को लागू करने के लिए सभी विधियां।

तो यह है कि मैं क्या

public class Barrier{ 

    private final int threadNumber; 

    public Barrier(int pThreadNumber){ 
     this.threadNumber = pThreadNumber; 
    } 

    public synchronized void barrier(){ 
     wait(); 
    } 

    public synchronized void releaseBarrier(){ 
     notifyAll(); 
    } 

    public synchronized void releaseThread(){ 
     notify(); 
    } 
} 

के साथ आया था लेकिन मैं सच में समझ में नहीं आता प्राप्त करने के लिए कैसे है कि धागे की एक निश्चित संख्या है जब तक सभी धागे पहुंचे बंद कर दिया जाता है। क्या केवल प्रतीक्षा/सूचित/सभी को सूचित करते हुए बाधा लागू करना संभव है?

आप सभी धागे आगे बढ़ने के लिए जब threadNumber धागे इंतजार कर रहे हैं चाहते हैं:

+2

क्या यह होमवर्क है? या आप साइक्लिकबैरियर का उपयोग क्यों नहीं करना चाहते हैं? – meriton

+0

मैं सिर्फ जावा धागे और समरूपता में जाने की कोशिश करता हूं और यह सीखने के लिए एक दिलचस्प अभ्यास लगता है –

उत्तर

3

होमवर्क की क्रमबद्ध करें, तो मैं केवल एक संकेत दे रहा हूँ। यह धागे के बराबर है threadNumber - थ्रेड आने के लिए प्रतीक्षा कर रहा है। एक तरीका है धागे की संख्या गिनना, और threadNumber -th धागा आने के बाद कुछ विशेष करना।

0

जावा विवरण से संबंधित एक अतिरिक्त संकेत: wait() पर अवरुद्ध एक थ्रेड को उग्र रूप से जगाया जा सकता है; Object.wait() javadocs देखें।

नकली wakeups बर्दाश्त करने के लिए, आप एक while पाश की जरूरत है, जहां सरल तर्क की मांग केवल एक if चेक या एक अंधे wait()

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