重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“如何使用java的CountDownLatch线程计数器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用java的CountDownLatch线程计数器”吧!
公司主营业务:成都网站制作、网站建设、外贸网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出双鸭山免费做网站回馈大家。
countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。
countDownLatch是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。
在一些时候由于数据库连表查询过于缓慢,并且无法在数据库sql层进行优化,这时我们需要在代码中使用线程去分页查询数据,多个线程都执行完毕后将数据封装进一个list再进行返回,这时需要保证所有线程执行完毕后才能返回。
// 首先创建一个线程计数器 构造参数为线程数量 CountDownLatch countDownLatch = new CountDownLatch(3); // 创建一个结果集合 List<> list = new ArrayList<>(); // 循环分页查询 for (int i = 1; i <= 3; i++) { // executorService 是一个线程池对象,这里直接使用了,也可以通过new Thread(){ public void run() }.start();匿名内部类方式创建线程 executorService.execute(() -> { // 调用查询 List<> list1 = mapper.find(i * 10, 10); // 将结果添加到集合中 list.addAll(list1); // 执行完毕调用线程计数器-1 方法 countDownLatch.countDown(); }); } try { // 调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行 countDownLatch.await(); System.out.println("返回数据添加完成"); } catch (Exception e) { e.printStackTrace(); }
// countDownLatch类中只提供了一个构造器 count为计数值 public CountDownLatch(int count){}; // 调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行 public void await() throws InterruptedException {}; // 和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行 public boolean await(long timeout, TimeUnit unit) throws InterruptedException {}; // 将count值减1 public void countDown() {}; // 返回当前计数 public long getCount(){}; // 返回计数器标识和当前计数 public String toString(){};
到此,相信大家对“如何使用java的CountDownLatch线程计数器”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!