【发布时间】:2020-06-17 20:20:37
【问题描述】:
考虑这段代码:
public class print extends Thread {
public void run() {
Out.print("Hello");
Out.println("World");
}
}
public class test {
public static void main (String[] args) {
Thread t1 = new print();
Thread t2 = new print();
Thread t3 = new print();
Thread t4 = new print();
Thread t5 = new print();
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
try {
t1.join();
t2.join();
t3.join();
t4.join();
t5.join();
}catch(InterruptedException e) {
}
}
}
目标是在下一行打印出你好,而不是世界。输出不正确,而且非常不一致,这意味着每隔几次测试它就会改变。我从未使用过线程,但我做了一些研究人员说,使用这个 .join 应该等待一个线程完成,以便下一个线程开始。我做错了什么?
谢谢!
【问题讨论】:
-
很可能您的 PC 太快了 - 在创建线程 2 到 5 时,线程 1 可能已经完成。你要做的是告诉所有线程:“去写你好,然后写世界”。然后你等待第一个完成 - 但所有其他人都可以随时打印
-
您可以将当前线程名称添加到输出中,然后查看所有内容:-)
-
好的,那我怎么让其他人也等着呢?
-
等待一个线程完成,以便下一个线程开始 你为什么会这样认为?您发布的代码连续五次调用
start(),而从未调用join()。
标签: java multithreading