作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要一点帮助来创建一个程序,在 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/
我是一名优秀的程序员,十分优秀!