java如何确保线程一个接一个地执行?
抱歉,如果这是个愚蠢的问题。我在一本书中发现了一个已解决的问题,但该解决方案不包含源代码。我提出了一个代码,但我不确定该代码是否符合解决方案规范。如果可能,请更正代码或提出更好的代码(欢迎解释)。谢谢你的帮助
问题:
有三条线T1、T2和T3。如何确保Java中的序列T1、T2、T3
解决方案:
多线程中的排序可以通过不同的方式实现,但您可以简单地使用thread类的join()方法在另一个线程完成执行时启动一个线程要确保三个线程执行,需要先启动最后一个线程,例如T3,然后按相反顺序调用连接方法,例如T3调用T2。加入,T2调用T1。加入,这样一来T1将首先完成,T3将最后完成
建议代码:
final Thread t3 = new Thread(new T3()); // assume T3 is a Runnable
final Thread t2 = new Thread(new T2());
final Thread t1 = new Thread(new T1());
t3.start();
t2.start();
t1.start();
t2.join();
t1.join();
# 1 楼答案
在您的示例中,主线程将等待t2和t1的执行完成。这3个线程的执行顺序可能不同。 我相信您希望在前一个线程的执行完成后启动每个线程。在这种情况下,我不认为使用并行性有什么意义。 如果您想等到多个线程的执行完成,我建议您阅读有关barrier同步的内容,尤其是这个类
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html
# 2 楼答案
你提议的代码行不通
t3
甚至可以在t2
开始之前完成。为了保证它们按顺序运行,您需要:但是,使用多个线程是毫无意义和浪费的。你可以用一条线达到同样的效果: