我有五个线程,怎么保证四个线程并发执行完之后再执行第五个线程
时间: 2024-10-21 17:05:42 浏览: 23
为了确保四个线程并发执行完后再执行第五个线程,你可以使用Java的`CountDownLatch`同步工具。`CountDownLatch`允许一个或多个线程等待其他线程完成特定的操作,比如全部到达某个状态。以下是实现步骤:
1. 初始化一个`CountDownLatch`计数器,初始值设置为线程总数减一(即4,因为最后一个线程完成后会触发所有线程的等待)。
2. 对于每个线程,启动它们并在线程内部调用`countDown()`方法,表示该线程已完成任务。
3. 第五个线程在开始前,先获取`CountDownLatch`的锁,也就是调用`await()`方法,直到所有其他线程完成了他们的操作并调用了`countDown()`。
4. 当`await()`返回时,说明已经有四个线程完成了,第五个线程就可以继续执行了。
下面是一个简单的示例代码(假设`MyRunnable`是一个实现了`Runnable`的类):
```java
public class Main {
private CountDownLatch latch = new CountDownLatch(4);
public void executeThreads(Runnable... runnables) {
for (int i = 0; i < runnables.length; i++) {
Thread thread = new Thread(() -> {
try {
// 线程执行任务...
// 这里省略具体的业务逻辑
System.out.println("Thread " + (i+1) + " is running");
latch.countDown(); // 完成后调用countDown()
} catch (InterruptedException e) {
e.printStackTrace();
}
});
thread.start();
}
// 创建并启动第五个线程,它将在其他四线程结束后开始
new Thread(() -> {
try {
latch.await(); // 等待其他线程完成
System.out.println("Starting the fifth thread...");
// 执行第五个线程的任务...
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
public static void main(String[] args) {
Main main = new Main();
main.executeThreads(new MyRunnable(), new MyRunnable(), new MyRunnable(), new MyRunnable());
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
// 实现你的任务逻辑...
}
}
```
阅读全文