我的java应用程序有一个加载任务,需要两个可并行化的服务器调用。所以我启动了一个Thread t1(执行 task1 )和一个Thread t2(用于 task2 )。 我希望在其他任务(1& 2)结束时执行特定任务 task3 。当然我不知道 task1 和 task2 中哪一个会先完成......
哪种方法最简单(也是最安全)的方法来编写代码?
感谢您的帮助
答案 0 :(得分:7)
你有几个选择:
答案 1 :(得分:2)
您可以join
t1
和t2
(按任意顺序),然后在加入后运行task3。
答案 2 :(得分:0)
在task3中实现一个监听器接口,并将其注册到task1& TASK2。 Task1和Task2必须在结束之前调用他们的监听器。这样,您可以在task3中记录哪个任务已经完成,当两个任务完成后,您可以执行第三个任务。
当然,如果你的task1 / 2可以退出异常,不要忘记将task3作为其UncaughtExceptionHandler
答案 3 :(得分:0)
我不想在完成工作时终止2个工作线程(task1和task2),然后你可以在task3中等待一个条件,直到其他两个完成。像这样:
public class Master {
private Object monitor_ = new Object();
private boolean task1Finished_;
private boolean task2Finished_;
class Task1 extends Thread {
public void run() {
// do stuff
synchronized (monitor_) {
task1Finished_ = true;
monitor_.notifyAll();
}
// keep on working
}
}
class Task2 extends Thread {
public void run() {
// do stuff
synchronized (monitor_) {
task1Finished_ = true;
monitor_.notifyAll();
}
// keep on working
}
}
class Task3 extends Thread {
public void run() {
synchronized (monitor_) {
while (!task1Finished_ || !task2Finished_) {
try {
monitor_.wait();
}
catch (InterruptedException ignored) {
}
}
}
// do stuff
}
}
// start tasks1, task2 and task3...
}