Java中的线程池和CountDownLatch来实现分批删除
时间: 2023-08-23 21:16:26 浏览: 94
在Java中,可以使用线程池和CountDownLatch来实现分批删除操作。首先,我们可以定义一个线程池来处理任务。线程池可以提高终端响应速度,同时可以控制并发线程的数量。然后,我们可以使用CountDownLatch来实现主线程等待子任务线程执行完毕的功能,以便在所有任务执行完毕后进行结果的汇总和后续操作。
具体实现的代码如下所示:
```java
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class BatchDeleteExample {
public void batchDelete(List<String> paramList) {
// 创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(paramList.size());
// 创建CountDownLatch,用于等待子任务线程执行完毕
CountDownLatch latch = new CountDownLatch(paramList.size());
for (String param : paramList) {
executorService.execute(() -> {
try {
// 执行删除操作
delete(param);
} finally {
// 子任务线程执行完毕,计数器减一
latch.countDown();
}
});
}
try {
// 主线程等待子任务线程执行完毕
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 所有任务执行完毕,进行结果汇总和后续操作
// ...
// 关闭线程池
executorService.shutdown();
}
private void delete(String param) {
// 执行删除操作
System.out.println("删除:" + param);
}
}
```
在上述代码中,我们首先创建了一个线程池,线程池的大小与任务数量相同,以便每个任务都能被一个线程处理。然后,我们创建了一个CountDownLatch,其初始计数器的值为任务数量。在每个子任务线程中,我们执行了删除操作,并在finally块中将计数器减一。主线程调用latch.await()方法等待所有子任务线程执行完毕。最后,我们可以在所有任务执行完毕后进行结果的汇总和后续操作。
这样,通过线程池和CountDownLatch的结合使用,我们可以实现分批删除操作,并且保证主线程在所有子任务线程执行完毕后继续往下执行。
#### 引用[.reference_title]
- *1* *2* *3* [线程池和CountDownLatch结合使用详解](https://blog.csdn.net/qldd/article/details/126631846)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文