账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    java代码并发操作咨询
    58
    0

    需求

    分页查询数据列表的时候同时查询总条数 想并发查询 但是感觉下面的代码有点繁琐 有没更简便的方式 或者有什么第三方框架能够简化类似这样的逻辑

        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);
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 海森伯不确定关系 普通会员 1楼

      在Java中,我们可以使用并发包中的接口和类来实现并发操作。以下是一个简单的例子,展示了如何使用java.util.concurrent包中的ExecutorServiceFuture类来并发执行一个任务:

      ```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 future = executor.submit(new Task(i)); } for (int i = 0; i < 5; i++) { System.out.println("Task " + i + " completed."); } executor.shutdown(); }

      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的并发编程提供了锁机制。

    更多回答
    扫一扫访问手机版