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

简介: 万万没想到,线程居然被饿死了!

构建单个线程的线程池和多个线程的线程池


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


在单个线程的线程池中,如果一个正在执行的线程中,使用该线程池再去提交第二个任务,因为线程池中的线程只有一个,那么第二个任务将会等待第一个任务的执行完成来释放线程,而第一个任务又在等待第二任务的执行来完成任务。从而产生了线程饥饿死锁(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线程池只有一个线程,则会产生死锁。


本文的例子请参考https://github.com/ddean2009/learn-java-concurrency/tree/master/ThreadPoolDeadlock

相关文章
|
存储 安全 Python
python多线程------>这个玩意很哇塞,你不来看看吗
python多线程------>这个玩意很哇塞,你不来看看吗
|
监控 安全 算法
这次锁面试题的连环16问,差点就跪了
这次锁面试题的连环16问,差点就跪了
211 0
|
JavaScript 小程序 Java
当年那个手搓CPU的老哥回来了!
当年那个手搓CPU的老哥回来了!
|
消息中间件 JavaScript 小程序
新来个阿里 P7,仅花 2 小时,撸出一个多线程永动任务,看完直接跪了,真牛逼!
新来个阿里 P7,仅花 2 小时,撸出一个多线程永动任务,看完直接跪了,真牛逼!
|
Java 关系型数据库 MySQL
【浅尝高并发编程】接私活差点翻车
作为一名本本分分的练习时长两年半的Java练习生,一直深耕在业务逻辑里,对并发编程的了解仅仅停留在八股文里。一次偶然的机会,接到一个私活,核心逻辑是写一个 定时访问api把数据持久化到数据库的小服务。
174 0
|
Web App开发 前端开发 JavaScript
冬奥快结束了还没有抢到冰墩墩?程序员一招让你不用排队不用愁!
随着“2022北京冬奥会”的盛大开幕,冰墩墩的热度与日俱增,线上被抢空,线下排长龙,为购买冰墩墩苦恼的竟少了几根秀发!如今冬奥马上就要拉下帷幕,还没抢到“冰墩墩”不要紧,这款程序来帮忙,国内一位程序员dragonir用前端+建模的方式自己就实现了线上拥有“冰墩墩”,同时将代码开源到了GitHub上,不得不感叹科技的力量,程序员的伟大,让拥有“冰墩墩”变得如此简单!
冬奥快结束了还没有抢到冰墩墩?程序员一招让你不用排队不用愁!
深夜!小胖问我,什么是自旋锁?怎么使用?适用场景是啥?
深夜!小胖问我,什么是自旋锁?怎么使用?适用场景是啥?
深夜!小胖问我,什么是自旋锁?怎么使用?适用场景是啥?
|
存储 Java 数据处理
新来的实习生连文件操作都不会,被老师傅骂了,有点委屈~
今天,是鸭哥面试系列的第 4 篇。 工作时,你的项目需要操作文件吗?
188 0
新来的实习生连文件操作都不会,被老师傅骂了,有点委屈~
|
人工智能 安全 数据挖掘
这么一搞,再也不怕线程打架了
假如我们需要处理一个文本文件,里面有 100万行数据,需要对每条数据做处理,比如将每行数据的数字做一个运算,放入到另一个文件里。
145 0
这么一搞,再也不怕线程打架了
|
存储 Java 编译器
学妹一反常态主动联系我,我要不要答应帮她?
之前在学校举办的活动上,认识了一个学妹。我死磨硬泡终于加了她的微信,经常给她发微信。 可是她总是对我爱答不理的,我心里总有一天让你高攀不起,后来就很少联系了。今天突然主动联系我:
354 0
学妹一反常态主动联系我,我要不要答应帮她?