आप लॉक चर का उपयोग कर सकते हैं "एक" और "बी" और रिवर्स ऑर्डर में "महत्वपूर्ण खंड" को लॉक करने के लिए उन्हें सिंक्रनाइज़ करें। उदाहरण के लिए। "ए" को सूचित करें, फिर "बी", "प्रिंट" लॉक करें, "बी" को सूचित करें, फिर "ए" लॉक करें।
कोड नीचे देखें: -
public class EvenOdd {
static int a = 0;
public static void main(String[] args) {
EvenOdd eo = new EvenOdd();
A aobj = eo.new A();
B bobj = eo.new B();
aobj.a = Lock.lock1;
aobj.b = Lock.lock2;
bobj.a = Lock.lock2;
bobj.b = Lock.lock1;
Thread t1 = new Thread(aobj);
Thread t2 = new Thread(bobj);
t1.start();
t2.start();
}
static class Lock {
final static Object lock1 = new Object();
final static Object lock2 = new Object();
}
class A implements Runnable {
Object a;
Object b;
public void run() {
while (EvenOdd.a < 10) {
try {
System.out.println(++EvenOdd.a + " A ");
synchronized (a) {
a.notify();
}
synchronized (b) {
b.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class B implements Runnable {
Object a;
Object b;
public void run() {
while (EvenOdd.a < 10) {
try {
synchronized (b) {
b.wait();
System.out.println(++EvenOdd.a + " B ");
}
synchronized (a) {
a.notify();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
आउटपुट: - 1 एक 2 बी 3 एक 4 बी 5 एक 6 बी 8 बी 9 ए 10 बी
उत्तर के लिए धन्यवाद लेकिन आप कैसे करेंगे उदाहरण के लिए, टी 1 के अंदर से "ध्वज" का संदर्भ लें? मैंने ParentClass.flag जैसे कुछ कोशिश की है (जहां पेरेंट क्लास वह वर्ग है, जहां से मैं "मुख्य" और "सहायता" शुरू करता हूं) और यह काम नहीं कर रहा है ... – user1031431
इंस्टेंट्यूट टी 1/टी 2 उनके युक्त वर्ग के संदर्भ में , और ध्वज उस वर्ग का सदस्य बनाते हैं? –