Печать числа OddEven с использованием двух потоков в JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Печать числа OddEven с использованием двух потоков в Java

Сообщение Anonymous »

Я уверен, что на мой вопрос есть несколько ответов. Но я изучаю основные концепции многопоточности и придумал приведенный ниже код.
Есть два потока: один печатает четные числа, а другой — нечетные. По какой-то причине они оба сначала печатают свой правильный номер, а затем «меняются» ролями. Кроме того, кажется, что они печатают не только первые 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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»