मान लीजिए मेरे पास एक मास्टर है जो स्लेव थ्रेड ऑब्जेक्ट्स की एक सूची रखता है। प्रत्येक बार कदम पर, मैं चाहता हूं कि मास्टर समानांतर में स्लेव थ्रेड चलाए, हालांकि, समय के अंत में, मैं चाहता हूं कि स्लेव थ्रेड्स आगे बढ़ने से पहले वर्तमान समय चरण को पूरा करने के लिए एक-दूसरे की प्रतीक्षा करें। साथ ही, मैं प्रत्येक बार चरण पर स्लेव थ्रेड को पुनर्स्थापित नहीं करना चाहता हूं। मेरे पास 2 संभावित समाधान हैं, और मुझे नहीं पता कि उनमें से कोई भी काम कैसे करें:जावा - समय-चरण आधार पर एकाधिक धागे सिंक्रनाइज़ करना
1) स्लेव थ्रेड में रन() विधि थोड़ी देर (सत्य) लूप में है। SlaveThread SlaveThread में एक भी पाश के निष्पादन के बाद, मैं होगा मास्टर (जो मैं कैसे करना है पता नहीं है) को सूचित, और मास्टर से पहले
try{
for (int i = 0; i < numSlaveThreads; i++) {
while (!slaveThreads[i].getCompletedThisIter()) {
wait()
}
}
System.out.println("Joined");
कुछ}
करता है अगली बार कदम आगे बढ़ना। यह मैं कैसे करूंगा? मैं एक स्लेव थ्रेड कैसे मास्टर को सूचित कर सकता हूं?
2) स्लेव में रन() जबकि (सत्य) लूप में नहीं है, तो मुझे प्रत्येक पुनरावृत्ति पर प्रारंभ() पर कॉल करना होगा। लेकिन इस बिंदु पर दास की धागा स्थिति समाप्त हो जाएगी। मैं इसे फिर से शुरू किए बिना फिर से शुरू() कैसे कॉल कर सकता हूं?
लगता है कि आपका चक्रीय बाधा हैं: http://docs.oracle.com/javase/7/docs/api /java/util/concurrent/CyclicBarrier.html (संस्करण का उपयोग 1.) – millimoose