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<>());
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Java/Android多线程并发、同步,线程之间通信,主、子线程的一些问题(CountDownLatch、CyclicBarrier和Semaphore)
- ListeningExecutorService配合CountDownLatch多线程并发处理数据
- 多线程:利用互斥锁来处理全局变量的互斥问题
- GOOD单例模式,多线程同时访问一个实例对象问题的处理,加lock
- Java多线程20:多线程下的其他组件之CountDownLatch、Semaphore、Exchanger
- WP7 多线程处理碰到的问题
- Java多线程:CountDownLatch、CyclicBarrier 和 Semaphore
- C#多线程处理webbrowser及InvokeMember("click")无响应的问题
- Java的concurrent包里面的CountDownLatch多线程然后必须等其它任务执行完毕
- SQLite并发操作下的分析与处理,解决database is locked,以及多线程下执行事务等问题
- 多线程之CountDownLatch和CyclicBarriar使用
- Java多线程与并发库高级应用之倒计时计数器CountDownLatch
- java多线程编程——同步器CountDownLatch(三)
- 多线程计数器之CountDownLatch和join
- Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例 (r)
- java 多线程 CountDownLatch用法
- C# 多线程 STA单线程 发送图片 剪贴板 问题处理
- 多线程下pymongo连接数过多的问题处理
- 多线程进阶---Thread.join()/CountDownLatch.await() /CyclicBarrier.await()
- Java多线程之CountDownLatch