简介
一个多线程同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待
用法
1 2 3 4 5 6 7 8
| public CountDownLatch(int count);
public void countDown();
public void await() throws InterruptedException
|
示例
示例有潜在问题:使用 CountDownLatch 进行异步转同步操作,每个线程退出前必须调用 countDown 方法,线程执行代码注意 catch 异常,确保 countDown 方法被执行到,避免主线程无法执行 至 await 方法,直到超时才返回结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| CountDownLatch countDownLatch = new CountDownLatch(2); Map<String, Object> map = new HashMap<String, Object>(); new Thread(new Runnable() { @SneakyThrows @Override public void run() { List<PersonDto> l = personHouseHolderService.getPersonHouseHolderListByPage(searchMap); map.put("rows", l); countDownLatch.countDown(); } }).start();
new Thread(new Runnable() { @SneakyThrows @Override public void run() { int total = personHouseHolderService.selectCountHouseHolder(searchMap); map.put("total", total); countDownLatch.countDown(); } }).start();
countDownLatch.await();
|