需求
分页查询数据列表的时候同时查询总条数 想并发查询 但是感觉下面的代码有点繁琐 有没更简便的方式 或者有什么第三方框架能够简化类似这样的逻辑
ExecutorService executorService = Executors.newFixedThreadPool(2);
CountDownLatch countDownLatch = new CountDownLatch(2);
Map<String, Object> map = new HashMap<>();
// 一个线程查记录数
executorService.submit(() -> {
List<Integer> data = Lists.newArrayList(1, 2, 3);
map.put("data", data);
countDownLatch.countDown();
});
// 一个线程查总条数
executorService.submit(() -> {
int count = 10;
map.put("count", count);
countDownLatch.countDown();
});
countDownLatch.await();
System.out.println(map);
在Java中,我们可以使用并发包中的接口和类来实现并发操作。以下是一个简单的例子,展示了如何使用java.util.concurrent
包中的ExecutorService
和Future
类来并发执行一个任务:
```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future;
public class ConcurrentExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5); // 创建一个固定大小的线程池
for (int i = 0; i < 5; i++) {
Future
static class Task implements Runnable {
private int index;
public Task(int index) {
this.index = index;
}
@Override
public void run() {
System.out.println("Task " + index + " started.");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task " + index + " completed.");
}
}
} ```
在这个例子中,我们首先创建了一个固定大小的线程池,然后提交了5个任务到线程池中。每个任务都是一个实现了Runnable
接口的类,这个类中有一个run()
方法,这个方法在任务运行完毕后被调用。run()
方法中的代码会在控制台上打印一条消息。
我们使用executor.shutdown()
方法来停止线程池的运行。这个方法会阻塞直到所有的任务都完成。
注意:Java的并发编程是基于多线程的,也就是说,同一个线程可以同时执行多个任务。但是,为了防止竞态条件(即多个线程访问共享资源时可能会引发的结果),Java的并发编程提供了锁机制。