Есть два потока: один печатает четные числа, а другой — нечетные. По какой-то причине они оба сначала печатают свой правильный номер, а затем «меняются» ролями. Кроме того, кажется, что они печатают не только первые 10 чисел.
Почему они выдают неверный результат?
Код: Выделить всё
package com.thread;
public class OddEventThread {
public static void main(String[] args) {
SharedResource obj = new SharedResource();
OddThread oddThread = new OddThread(obj);
EvenThread evenThread = new EvenThread(obj);
System.out.println("Starting Odd/Even Thread");
oddThread.start();
evenThread.start();
}
}
class OddThread extends Thread {
SharedResource obj;
public OddThread(SharedResource obj) {
this.obj = obj;
}
@Override
public void run() {
System.out.println("OddThread");
obj.printOdd();
}
}
class EvenThread extends Thread {
SharedResource obj;
public EvenThread(SharedResource obj) {
this.obj = obj;
}
@Override
public void run() {
System.out.println("EvenThread");
obj.printEven();
}
}
class SharedResource {
private int N = 10;
private int counter = 1;
public void printOdd() {
System.out.println("printOdd");
synchronized (this) {
System.out.println("OddThread: Counter: " + counter);
while (counter
Подробнее здесь: [url]https://stackoverflow.com/questions/72108458/printing-oddeven-number-using-2-threads-in-java[/url]
Мобильная версия