使用带有Join的线程在Java中打印ABC

时间:2017-08-09 17:15:56

标签: java multithreading java-threads

我需要一些帮助来创建一个程序,使用Threads在Java中创建一个按顺序打印ABC,其中每个线程都应该是一个字母。

我是Java中的新手。

要求是我必须使用 join(),主程序只能创建对象并启动线程。

无法在主程序中使用join。不能用睡觉。也不能使用join参数,比如join(1000),它应该只是join()。

这是我到目前为止所做的:

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并挂起。有人可以就如何使这项工作给我一些指导吗?

谢谢, 菲利普

1 个答案:

答案 0 :(得分:2)

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);
    }
}