ThreadPoolExecutor是Java线程池并发症。多线程开发基本上是基于此的,以进行特定的业务发展。尽管我觉得自己已经回来了,但在线帖子上有很多文章,但我一一写信给它们。毕竟,它比看别人更深刻。因此,我最近已经整理了Java知识的系统。然后主要分析此多线程框架的原理。
访谈取决于该构造函数中7个参数的作用,
零成员
CTL变量对访谈的含义是什么?CTL变量使用高3位数字来指示线程池的状态,并使用低29位数字表示线程的数量。 -1。
首先,让我们看一下通常的业务代码是将任务提交到线程池执行。该功能是通过执行或提交方法。不同之处在于提交未来的申报表,执行返回空缺,然后我们主要分析执行的执行过程。提交涉及它。线程返回异步,然后将其分别分析。然后,下面的执行函数可以看到线程池的整个执行过程。
线程池执行任务流程图如下:
我相信大概的过程通常很明显:
在实际的源代码中,有一些小细节很容易被忽略
线程池的新工作任务是主要的addworker方法。由于代码相对较长,所以我只是在代码中写下评论
添加工作场所的主要步骤
如果Workerdded失败了,请删除刚刚从Worder的集合中添加的工作线程,然后将线程的数量减少1,并且
首先,查看类班级成员变量的构造函数。从下面的工作代码中可以看出,它实现了可运行的接口。运行方法,然后查看Run的工作流程。
在以下代码中,工作的运行直接调用runwork,并将其传递到自己的对象中。开始一个周期来判断第一个任务。后者不是任务队列中的空,然后执行任务。如果处理工作的退出。
让我们看一下GetTask的处理逻辑以获得任务队列。如果返回的零,也就是说,跑步者周期退出,则ProcessWorkXit将在Finnaly中进行处理。
工人的退出处理:1在上述分析中,了解完成任务期间是否发生异常标记。如果任务执行过程是错误的,则线程池的线程数IS在执行任务中,持有工人内部的锁,任务已完成,并将工人从工人的集合中删除。3.执行trytermination函数,是否关闭线程池4.是否根据线程池状态补充非核心心脏。工作人员线程要处理
trytermiantic的逻辑是线程池关闭的场景
当线程池无法处理任务时的处理策略:1。默认拒绝策略是apolicy直接抛出recubldexecutionException。源代码实际上,当线程池仍关闭时,请尝试将任务提交到线程中池执行
本文主要基于线程池的状态转换,工作线工作工人创建以及任务队列中的任务过程以及对拒绝策略的详细分析。