Я пытаюсь выполнить 2 потока чередующимся образом.Один из них печатает нечетные числа, а другой - четные числа на консоль (<= 100).Я хочу, чтобы результат был: 1 2 3 4 5 6 7 8 9 10 .... и так далее.то есть они должны выполняться один за другим по порядку. </p>
Вот код для этого:
class Monitor{
boolean flag = false;
}
class OddNumberPrinter implements Runnable{
Monitor monitor;
OddNumberPrinter(Monitor monitor){
this.monitor = monitor;
}
@Override
public void run() {
for (int i = 1; i<100; i+=2){
synchronized (monitor){
while(monitor.flag == true){
try {
wait();
} catch (Exception e) {}
}
System.out.print(i+" ");
monitor.flag = true;
notify();
}
}
}
}
class EvenNumberPrinter implements Runnable{
Monitor monitor;
EvenNumberPrinter(Monitor monitor){
this.monitor = monitor;
}
@Override
public void run() {
for (int i = 2; i<101; i+=2){
synchronized (monitor){
while (monitor.flag == false){
try {
wait();
} catch (Exception e) {}
}
System.out.print(i + " ");
monitor.flag = false;
notify();
}
}
}
}
public class InterleavingThreads {
public static void main(String[] args) throws InterruptedException {
Monitor monitor = new Monitor();
Thread t1 = new Thread(new OddNumberPrinter(monitor));
Thread t2 = new Thread(new EvenNumberPrinter(monitor));
t1.start();
t2.start();
}
}
Когда я в автономном режиме использую wait () и notify () ,он генерирует исключение, но использование monitor.wait () и monitor.notify () дает правильный вывод.Пожалуйста, объясните разницу в этих двух.