我需要一些帮助来创建一个程序,使用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并挂起。有人可以就如何使这项工作给我一些指导吗?
谢谢, 菲利普
答案 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);
}
}