我们在构建线程池的时候可以构建单个线程的线程池和多个线程的线程池。

那么线程池使用不当可不可能产生死锁呢?我们知道死锁是循环争夺资源而产生的。线程池中的线程也是资源的一种,那么如果对线程池中的线程进行争夺的话也是可能产生死锁的。

在单个线程的线程池中,如果一个正在执行的线程中,使用该线程池再去提交第二个任务,因为线程池中的线程只有一个,那么第二个任务将会等待第一个任务的执行完成来释放线程,而第一个任务又在等待第二任务的执行来完成任务。从而产生了线程饥饿死锁(Thread Starvation Deadlock).

线程饥饿死锁并不一定在单个线程的线程池中产生,只要有这种循环使用线程池的情况都可能产生这种问题。

我们看下例子:

public class ThreadPoolDeadlock {ExecutorService executorService= Executors.newSingleThreadExecutor();public class RenderPageTask implements Callable<String> {public String call() throws Exception{Future<String> header, footer;header= executorService.submit(()->{return "header";});footer= executorService.submit(()->{return "footer";});return header.get()+ footer.get();}}public void submitTask(){executorService.submit(new RenderPageTask());}
}

我们在executorService中提交了一个RenderPageTask,而RenderPageTask又提交了两个task。因为ExecutorService线程池只有一个线程,则会产生死锁。

我们的线程被饿死了!

在此我向大家推荐一个架构学习交流圈。交流学习微信:539413949(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

万万想不到,线程居然被饿死了相关推荐

  1. 万万没想到,线程居然被饿死了!

    我们在构建线程池的时候可以构建单个线程的线程池和多个线程的线程池. 那么线程池使用不当可不可能产生死锁呢?我们知道死锁是循环争夺资源而产生的.线程池中的线程也是资源的一种,那么如果对线程池中的线程进行 ...

  2. java 活锁 线程饿死,JAVA并发编程(四)线程死锁、饥饿、活锁

    JAVA并发编程(四)线程死锁 线程死锁 什么是线程死锁呢? 为什么会线程死锁呢? 如何避免线程死锁? 什么是饥饿呢? 什么是活锁呢? 线程死锁 什么是线程死锁呢? 死锁是指两个或两个以上的线程在执行 ...

  3. 黄金3:雨露均沾-不要让你的线程在竞争中被“饿死”

    欢迎来到<并发王者课>,本文是该系列文章中的第13篇. 在上篇文章中,我们介绍了避免死锁的几种策略.虽然死锁臭名昭著,然而在并发编程中,除了死锁之外,还有一些同样重要的线程活跃性问题值得关 ...

  4. 并发王者课-黄金3:雨露均沾-不要让你的线程在竞争中被“饿死”

    欢迎来到<并发王者课>,本文是该系列文章中的第13篇. 在上篇文章中,我们介绍了避免死锁的几种策略.虽然死锁臭名昭著,然而在并发编程中,除了死锁之外,还有一些同样重要的线程活跃性问题值得关 ...

  5. 有的人撑死,有的人饿死,有的人吓死

    ▌有的人撑死 ▌ 近期部分参加 全国大学生智能车节能信标组 的同学拿到了由龙邱提供的信标.对于它所能够提供的无线充电功率进行了测试.发现它能够远超过50W的输出功率.下面是由杭州电子科技大学信标小组测 ...

  6. java中活锁和死锁的区别_死锁、活锁、饿死和阻塞的个人理解

    以下个人理解,请各位前辈多多指教: 死锁: ① 互斥条件:指进程对所分配到的资源进行排它性使用,在一段时间内某资源只由一个进程占用,如果此时还有其他进程请求资源,则请求者只能等待,直至占有资源的进程被 ...

  7. 死锁、活锁和饿死的理解(转)

    死锁.活锁和饿死的理解(转) 看到一组漫画,很形象的说明了死锁.活锁和饿死的区别,原文链接:http://f.dataguru.cn/thread-541686-1-1.html ,这篇文章的死锁有点 ...

  8. 7-3 读者写者饿死问题

    参考https://blog.csdn.net/booksyhay/article/details/82762278 在之前的解决方案中,会存在一个问题: 作者可能会饿死. 如果写者到达的时候,临界区 ...

  9. 死锁、活锁、饿死和阻塞的个人理解

    以下个人理解,请各位前辈多多指教: 死锁: ① 互斥条件:指进程对所分配到的资源进行排它性使用,在一段时间内某资源只由一个进程占用,如果此时还有其他进程请求资源,则请求者只能等待,直至占有资源的进程被 ...

最新文章

  1. 大家好,给大家介绍一下,我们的主题歌 @虾米音乐
  2. mysql -ss -e_课内资源 - 基于ssm框架和mysql的网上选课系统
  3. MIMO雷达比幅单脉冲测角精度分析(系统工程与电子技术)
  4. mssql 计划怎每隔n秒_前端:调你一个接口6秒还配资深工程师?后端:有24部分需要处理!...
  5. Android-用ListView显示SDCard文件列表
  6. Nacos与Eureka的区别有哪些?
  7. 上线清单 —— 20 个 Laravel 应用性能优化项
  8. 极光推送经验之谈-Java后台服务器实现极光推送的两种实现方式
  9. 日语编程语言抚子 - 第三版特色初探
  10. arm qt5 iconv 问题
  11. 轴固定位置_轴承的装配与内外圈固定方法,一文让你搞懂
  12. Mac Nginx 配置 Tomcat 配置 jdk环境变量 Nginx部署服务遇到的坑(1)
  13. Nodejs Set和Map的使用
  14. springMVC+Mybatis实现查询分页
  15. 学python lesson2
  16. C++调用其他语言(C#、java、python)
  17. .NET core ABP 获取远程IP地址
  18. 高质量图片缩略图生成(编程笔记)
  19. 计算机能直接和cpu交换数据的是,内存储器_能直接与CPU交换信息的存储器是
  20. 【AS3代码】擦窗户效果(也就是流行的妄撮游戏)

热门文章

  1. CSS速成手册(2)
  2. 社区产品笔记:社区产品如何从0到1?
  3. Android(AIDL)自动重复拨号及挂断/接听电话
  4. 4G,让这个冬天不寒冷
  5. html5 dreamlive,熠熠闪耀的ENSEMBLE! DREAM LIVE 5th Tour Stargazer即将开演
  6. DNSPod十问黑湖智造:让工厂数字化如搭积木一样简单
  7. 演艺O2O即将爆发,蛋糕如何分?
  8. SDN系统方法 | 8. 网络虚拟化
  9. python泰坦尼克号生存预测论文_泰坦尼克号生存率预测(基于Python)
  10. 【Algorithm】 Reservoir Sampling Shuffle an Array