首页 > 基础资料 博客日记
java基础----记一次线上的CountDownLatch引发的死锁问题
2023-07-27 17:28:54基础资料围观434次
文章java基础----记一次线上的CountDownLatch引发的死锁问题分享给大家,欢迎收藏Java资料网,专注分享技术知识
1. 大概流程:主线程A执行获取后台广告相关的所有数据,在主线程方法中,开启了一个数量是5(需要获取5部分数据)的CountDownLatch,运行5个子线程A1、A2、A3、A4、A5。这5个子线程用的是threadPool1,目的是获取数据后在主线程中合并。在A2线程中,因为这个线程需要处理的数据量比较大,所以也在里面开启了一个数量是N的CountDownlatch,N取决于大数据量需要几次能获取完。然后这个里面的N个线程用的线程池也是threadPool1。假设这里是200个批次,那就是需要开启200个线程,标记为B0,B2.....B200。线程池设置的核心线程数量是30,最大到60,队列大小是100。
引发问题:主线程中如果有新的请求进来需要把任务加到等待队列中。A2也需要把来不及执行的任务放到队列中,主线程需要等待A2执行完继续往下走,A2在等待主线程执行完释放线程,形成死锁。
解决方式:主线程和开启的多个线程,和子线程开启的多个线程用不同的线程池去管理,避免相互等待。同时在主线程的await方法中添加等待的过期时间,避免一直阻塞。
文章来源:https://www.cnblogs.com/ygliu/p/15676584.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- Java开发笔记(一百五十五)生成随机数的几种途径
- 榨干 Claude Code 的 16 个实用小技巧(高端玩法,建议收藏!)
- NBA巨星詹姆斯表变老嫂子了?这锅Viggle Ai得背/Ai视频创作/Ai魔性视频创作/Ai优质视频创作
- Java简历、面试、试用期、转正
- 使用Apollo配置中心,**静态字段通过`@Value`的setter方法可以实现热更新**
- vivo Pulsar 万亿级消息处理实践(3)-KoP指标异常修复
- MybatisPlus使用详情
- G1收集器:JVM垃圾回收的新一代王者
- Viggle Ai API直通车/ViggleAi商务合作/ViggleAi API对接/ViggleAi深度合作/Ai视频合作
- JAVA_笔试