2 回答

TA貢獻1809條經驗 獲得超8個贊
正如評論所提到的,最簡單的方法是在 3 個線程中的每一個上調用 join() :thread1.join(); thread2.join(); thread3.join();
或者使用 aCountDownLatch
雖然它涉及更多(但在概念上可能更“正確”):
latch = new CountDownLatch(3)
在完成任務
latch.countDown()
后讓每個線程去做。讓主線程
latch.await()
- 瞧。

TA貢獻1887條經驗 獲得超5個贊
與其手動創建Threads ,不如使用ExecutorService API. 使用ExecutorService您可以提交長時間運行的操作,結果您將收到Future實例,讓您等到操作完成。
請參閱下面的示例,該示例顯示了該想法:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
public class Threads {
public static void main(String[] args) {
new Threads().myMethod();
}
private String myMethod() {
ExecutorService executor = Executors.newFixedThreadPool(3);
List<Future<?>> futures = new ArrayList<>(3);
futures.add(executor.submit(this::LongRunningOperation1));
futures.add(executor.submit(this::LongRunningOperation2));
futures.add(executor.submit(this::LongRunningOperation3));
for (Future<?> future : futures) {
try {
future.get();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("All operations are finished!");
return "Done";
}
private void LongRunningOperation1() {
sleep(TimeUnit.SECONDS.toMillis(1));
System.out.println("LongRunningOperation1 is finished!");
}
private void LongRunningOperation2() {
sleep(TimeUnit.SECONDS.toMillis(2));
System.out.println("LongRunningOperation2 is finished!");
}
private void LongRunningOperation3() {
sleep(TimeUnit.SECONDS.toMillis(3));
System.out.println("LongRunningOperation3 is finished!");
}
private void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
上面的代碼打?。?/p>
LongRunningOperation1 is finished!
LongRunningOperation2 is finished!
LongRunningOperation3 is finished!
All operations are finished!
添加回答
舉報