Распечатайте ABC в Java, используя потоки с соединением

Мне нужна небольшая помощь, чтобы создать программу, которая печатает ABC, всегда в этом порядке, на Java, используя потоки, в которых каждый поток должен быть буквой.

Я новичок в потоках в Java.

Требование состоит в том, что я должен использовать join(), а основная программа может иметь только создание объекта и запуск потоков.

Невозможно использовать соединение внутри основной программы. Не могу использовать сон. Также нельзя использовать соединение с параметрами, такими как соединение (1000), это должно быть только соединение ().

Вот что я сделал до сих пор:

public class Write extends Thread
{
private String letter;

public Write(String letter)
{
    this.letter = letter;
}

@Override
public void run ()
{       
    try
    {
        if ( letter == "A")
        {
            this.join();
            System.out.print(letter);
        }
        else if ( letter == "B")
        {
            this.join();
            System.out.print(letter);         
        }
        else if ( letter == "C")
        {
            System.out.print(letter);
        }
    }
    catch (InterruptedException ie)
    {
           ie.printStackTrace();
    }
  }
}

public class TestWrite {

public static void main(String[] args) {

    Write letter1 = new Write("A");
    Write letter2 = new Write("B");
    Write letter3 = new Write("C");

    letter1.start();
    letter2.start();
    letter3.start();

}

}

Приведенный выше код не будет работать, он печатает только C и зависает. Может ли кто-нибудь дать мне несколько советов о том, как сделать эту работу?

Спасибо, Филипе


person Filipe    schedule 09.08.2017    source источник
comment
Вы видели stackoverflow.com/questions/27370037/?   -  person    schedule 09.08.2017
comment
И вы не можете использовать == со строкой   -  person    schedule 09.08.2017
comment
if ( letter == "A") --› Как сравнивать строки в Java?   -  person Pshemo    schedule 09.08.2017
comment
Вы правы, спасибо.   -  person Filipe    schedule 09.08.2017


Ответы (1)


Функция join блокируется до завершения вызывающего потока. Итак, вам нужно вызвать эту функцию для того, что вы ждете. В вашем случае C ждет B, B ждет A, а A не зависит.

public class Write extends Thread
{
    private String letter;
    private Write previous;

    public Write(String letter, Write previous)
    {
        this.letter = letter;
        this.previous = previous;
    }

    @Override
    public void run ()
    {
        if (previous != null) {
            try {
                previous.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.print(letter);
    }
}
person jeanr    schedule 09.08.2017
comment
Если это помогло вам, не стесняйтесь отмечать это как решенное :) - person jeanr; 09.08.2017