java基础----记一次线上的CountDownLatch引发的死锁问题
2022/7/22 2:00:12
本文主要是介绍java基础----记一次线上的CountDownLatch引发的死锁问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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方法中添加等待的过期时间,避免一直阻塞。
这篇关于java基础----记一次线上的CountDownLatch引发的死锁问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-0601-电商商品中心解密:仅凭SKU真的足够吗?
- 2024-05-01为什么公共事业机构会偏爱 TiDB :TiDB 数据库在某省妇幼健康管理系统的应用
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能