【问题标题】:Print ABC in Java using Threads with Join使用带有 Join 的线程在 Java 中打印 ABC
【发布时间】:2017-08-09 17:15:56
【问题描述】:

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

我是 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 并挂起。有人可以给我一些关于如何完成这项工作的指导吗?

谢谢, 菲利普

【问题讨论】:

标签: java multithreading java-threads


【解决方案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);
    }
}

【讨论】:

  • 如果这对您有帮助,请毫不犹豫地将其标记为已解决 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
相关资源
最近更新 更多