首页 > 编程语言 > 详细

线程池中的 工作线程如何被回收

时间:2020-11-01 00:06:43      阅读:198      评论:0      收藏:0      [点我收藏+]

前言

    JDK中的ThreadPoolExecutor线程池相信大家都很熟悉,对于线程池的一些高频面试题,比如有哪些参数,每个参数的含义,什么时候发挥作用,工作流程等问题都能回答上来。而对于一些不是很常见的线程池面试题就显得有点模糊,比如:线程池中线程执行完了一个任务接下来是做什么,是等待还是被收回,如果是等待,那么判断的依据是啥,如果是被回收,那么是怎么被回收的。对于这些问题我们就必须深挖ThreadPoolExecutor源码知识了,而不是背几个常见的面试题就行,下面我们一起来看一下线程执行完了一个任务接下来是做什么


1. execute(Runnable command)

    execute方法是我们使用线程池的源头,我来看一下调用execute方法后干了什么

技术分享图片

重点看addWorker()方法,这里我们要联想到线程池是一个池子,从方法名也可以看出addWorker()增加一个工作者,那么这个Worker对象肯定会放到池子里面去,我们能想到这个池子肯定是一个集合,比如List,Set,Map都可以

技术分享图片

果然是用Set做集合,然后会把Worder对象放到Set中,然后我们再来看是怎么向线程池中添加任务的。

技术分享图片

我们会看到将传进来的Runnable任务包装成一个Worker对象,然后将Worker的thread成员属性复制给了Thread t局部变量,我们具体看一下Worker这个类

技术分享图片

会发现Worker的构造方法会利用创建线程工厂创建一个新线程,并且将当前this对象赋值给了thread成员变量,重写了run()方法,也至于上一张图所指出的thread.start()启动线程会调用Worker对象run()方法,后面重点来看run()方法,TODO明天继续写

线程池中的 工作线程如何被回收

原文:https://www.cnblogs.com/semi-sub/p/13908099.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!