按特定顺序运行线程

时间:2016-04-18 20:42:15

标签: java

我有疑问。 我刚刚开始使用Threads而且非常蹩脚。 我正在做一些任务。

我们说我有3个主题。每个线程的主要任务是从.txt写入1行,依此类推到文件末尾。 我设法做到了这一点,但我不知道如何正确使用wait()和notify()。 我的程序运行如下:

t1 writes line 
t2 writes line 
t1 writes line 
t2 writes line 
t3 writes line 
t2 
t1 
t2 
t3
t2 
t1 ...

当我使用某个对象同步我的线程时。在每个新的Thread run()方法中,我也输入了notifyAll()和wait()方法。但它应该像它应该的那样工作,这是:

t1
t2
t3
t1
t2
t3
...

任何提示家伙?我会感激不尽。

tldr:如何通知t2在t1之后启动,t3之后是t3,t3之后是t1等等?

2 个答案:

答案 0 :(得分:1)

使用Thread类的最简单的解决方案:

thread1.start();
thread1.join();
thread2.start();
thread2.join();
thread3.start();
thread3.join();

但这真的有帮助吗?如果你想顺序运行它们,为什么要将它们创建为线程呢?

答案 1 :(得分:0)

  

他们必须在后台工作并等待轮到他们。

在这种情况下,您可以让一个线程运行所有这些。

  

如何通知t2在t1之后启动,t3之后是t3,t3之后是t1等等?

new Thread(() -> {
    thread1.run();
    thread2.run();
    thread3.run();
}).start();

这会在后台运行任务,一次一个。