首页 > 基础资料 博客日记
java基础----记一次线上的CountDownLatch引发的死锁问题
2023-07-27 17:28:54基础资料围观231次
文章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进行投诉反馈,一经查实,立即删除!
标签: