您的位置:首页 > 其它

CountDownLatch 处理多线程问题

2020-04-01 18:42 330 查看

多线程问题记录(自己的理解)

// 主线程及 待处理的数据
List<User> users = 业务处理后形成的集合

// CountDownLatch 用来处理多线程等待问题,如 主线程 -> 多线程 -> 等待多线程全部执行完成 -> 主线程
// 初始化计数器
CountDownLatch downLatch = new CountDownLatch(users.size());

// 开启多线程任务
users.forEach(user -> {

new Thread(new Runnable() {
@Override
public void run() {
System.out.println("当前线程:" + Thread.currentThread().getName());
try {
// user的业务处理方法
...
...
} catch (Exception e) {
e.printStackTrace();
} finally {
downLatch.countDown();
// 执行结束后计数器减 1 , 计数器结束后多线程任务结束
// 此方法最好放finally内部, 不然上面user业务代码异常后可能导致
// downLatch.await() 一直等待,阻塞线程
}
}
}).start();
});
// 如果计数器不为零就等待
downLatch.await();

// 线程内部做集合修改的话用做线程安全,不然可能产生错误
List<User> users= Collections.synchronizedList(new ArrayList<>());
  • 点赞
  • 收藏
  • 分享
  • 文章举报
丶想友 发布了8 篇原创文章 · 获赞 4 · 访问量 209 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: