[英]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.