[英]Thread synchronization question (in java)
我的java应用程序有一个加载任务,需要两个可以并行化的服务器调用。 所以我启动了一个Thread t1(执行task1 )和一个Thread t2(for task2 )。 我希望在其他任务(1和2)结束时执行特定任务task3 。 当然我不知道task1和task2中哪一个会先完成...
哪个是最简单(也是最安全)的代码编码方式?
谢谢您的帮助
你有几个选择:
您可以join
t1
和t2
(按任意顺序),然后在加入后运行task3。
在task3中实现一个监听器接口,并将其注册到task1和task2。 Task1和Task2必须在结束之前调用他们的监听器。 这样,您可以在task3中记录哪个任务已经完成,两个任务完成后,您可以执行第三个任务。
当然,如果你的task1 / 2可以退出异常,不要忘记将task3作为其UncaughtExceptionHandler
我不想在完成工作时终止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...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.