Koshkasobaka
@Koshkasobaka

Как сделать, чтобы потоки работали строго попеременно?

Здравствуйте. У меня есть 2 класса, один печатает только "A", другой печатает "B". Мне нужно сделать, чтобы они работали попеременно, т.е. в консоль выводилось : A B A B A B ... Чтобы не было подряд одной и той же буквы. Что я делаю не так?
public class LetterA extends Thread {
private final static Object lock = new Object();


   public LetterA() {

   }

    @Override
    public void run() {
        for (int i = 1; i <= 10; i++) {
            synchronized (lock) {
                if (i / 2 != 0) {
                    try {
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } else System.out.print("A ");

                lock.notifyAll();
            }
        }
}
    }


в Main:
private static void printLetters() {
        LetterA letterA = new LetterA();
        LetterB letterB = new LetterB();
      

        letterA.start();
        letterB.start();
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 2
@JaktensTid
Неудобный вопрос - зачем тогда вообще паралеллизм, если код должен исполняться синхронно?
Ответ написан
Bavashi
@Bavashi Куратор тега Java
class LetterA extends Thread {

    @Override
    public void run() {
        for (int i=0; i<10; i++){
            try {
                System.out.println("A");
                Thread.sleep(50);
            } catch (Exception ex) {
            } 
        }
    }
}

class LetterB extends Thread {

    @Override
    public void run() {
        for (int i=0; i<10; i++){
            try {
                System.out.println("B");
                Thread.sleep(50);
            } catch (Exception ex) {
            } 
        }
    }
}
...
private static void printLetters() 
    {
        LetterA letterA = new LetterA();
        LetterB letterB = new LetterB();
      
        letterA.start();
        letterB.start();
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы