CountDownLatch 多线程返回结果
时间: 2023-10-13 12:02:07 浏览: 78
CountDownLatch 可以用于多线程场景中获取线程的执行结果。可以通过以下步骤实现:
1. 创建一个 CountDownLatch 对象,并将计数器初始化为线程数量加1,即 latch = new CountDownLatch(n+1),其中 n 为线程的数量。
2. 创建多个线程,并将 CountDownLatch 对象作为参数传递给这些线程。在每个线程中,执行需要返回结果的操作,并将结果保存在相应的变量中。
3. 在每个线程执行完操作后,调用 countDown() 方法通知 CountDownLatch 对象一个线程已经完成。
4. 在主线程中,调用 await() 方法等待所有线程执行完操作。
5. 当所有线程都执行完操作后,主线程就可以通过获取各个线程保存的结果来进行进一步的处理。
示例代码如下所示:
```
// 创建 CountDownLatch 对象并初始化计数器
CountDownLatch latch = new CountDownLatch(n+1);
List<Object> results = new ArrayList<>();
for (int i = 0; i < n; i++) {
Thread thread = new MyThread(latch, i, results);
thread.start();
}
try {
// 等待所有线程执行完操作
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 在这里可以对结果进行进一步处理
// results 中保存了每个线程执行的结果
```
在上面的代码中,MyThread 是一个自定义的线程类,它接受一个 CountDownLatch 对象、线程的编号和一个保存结果的列表作为参数。在 MyThread 的 run() 方法中,执行需要返回结果的操作,并将结果保存在列表中。在操作执行完成后,调用 countDown() 方法通知 CountDownLatch 对象一个线程已经完成。主线程在调用 await() 方法后会等待所有线程执行完操作,然后可以通过获取 results 列表中的结果来进行进一步的处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [【多线程笔记01】多线程之CountDownLatch介绍及其使用](https://blog.csdn.net/qq_39826207/article/details/127113320)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [java多线程怎么同步返回结果](https://blog.csdn.net/kkevin_zzhang/article/details/129672820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文