gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:40:20 25 4
gpt4 key购买 nike

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

我是 Java 线程的新手。

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

无法在主程序中使用 join。无法使用 sleep 。也不能使用带有参数的 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 并挂起。有人可以给我一些关于如何完成这项工作的指导吗?

谢谢,菲利普

最佳答案

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

关于java - 使用带有 Join 的线程在 Java 中打印 ABC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45596912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com