CountDownLatch线程计数器
CountDownLatch的使用
概念
countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。
countDownLatch是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。
使用场景
在一些时候由于数据库连表查询过于缓慢,并且无法在数据库sql层进行优化,这时我们需要在代码中使用线程去分页查询数据,多个线程都执行完毕后将数据封装进一个list再进行返回,这时需要保证所有线程执行完毕后才能返回。
CountDownLatch的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| CountDownLatch countDownLatch = new CountDownLatch(3);
List<> list = new ArrayList<>();
for (int i = 1; i <= 3; i++) { executorService.execute(() -> { List<> list1 = mapper.find(i * 10, 10); list.addAll(list1); countDownLatch.countDown(); }); }
try { countDownLatch.await(); System.out.println("返回数据添加完成"); } catch (Exception e) { e.printStackTrace(); }
|
CountDownLatch的所有方法
1 2 3 4 5 6 7 8 9 10 11 12 13
| public CountDownLatch(int count){};
public void await() throws InterruptedException {};
public boolean await(long timeout, TimeUnit unit) throws InterruptedException {};
public void countDown() {};
public long getCount(){};
public String toString(){};
|