在Java中使用带加入的线程打印ABC
问题描述:
我需要一些帮助来创建一个程序,该程序在Java中使用线程(总是按照该顺序)打印ABC,其中每个线程都应该是一个字母。在Java中使用带加入的线程打印ABC
我是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和挂起。有人能给我一些关于如何做这项工作的指导吗?
谢谢, 菲利普
答
的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);
}
}
您是否看到https://stackoverflow.com/questions/27370037/print-odd-and-even-using-two-threads-in-java?rq=1? – 2017-08-09 17:18:22
你不能使用==与字符串 – 2017-08-09 17:21:32
if(letter ==“A”)' - > [如何比较Java中的字符串?](https://stackoverflow.com/questions/513832/how-do -i-compare-strings-in-java) – Pshemo