当前位置:   article > 正文

深入理解java线程池+源码解读_java线程池源码深度解析

java线程池源码深度解析

一.线程池简介

1. 什么是线程池

线程是稀缺资源,如果在高并发的情况下被无限制地创建和销毁,不仅会消耗系统资源,还会降低系统的稳定性。所以线程池的出现就是为了解决这些问题的。线程池通过重用已经存在的线程资源,减少线程创建和销毁的次数,提高了性能

2. 线程池的优点

● 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
● 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
● 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控

3. 线程池中核心关系继承

image-20221026130801986

4.对线程池的理解

①框架的两极调度模型

在JVM线程模型中,java线程被一对一映射为本地操作系统线程。java线程启动时会创建一个本地操作系统线程。当线程终止时,这个操作系统线程也会被终止回收。操作系统会调度所有线程并将它们分配给可用的CPU

在上层,java多线程程序通常把应用分解为若干个任务,然后使用用户级的调度器将这些任务映射到固定数量的线程;在底层,操作系统内核将这些线程映射到硬件处理器上。

应用程序通过executor框架控制上层的调度,下层的调度由操作系统内核控制,下层的调度不受应用程序的控制。

image-20221026131547083

②核心线程和非核心线程的本质区别

​ 本质没有区别,通过看源码的话,其实就是所有在线程池中的线程并没有一个特定的标识去标识这个线程是核心线程还是非核心线程,而是通过workCount当前线程数去对比线程池的核心线程数来看是核心线程还是非核心线程。

​ 就像一个常说的核心线程不会自己销毁而非核心线程会自动线程。在底层当前线程会根据线程数和线程池核心线程数做对比来看自己该执行核心线程的逻辑(去queue中take值)还是非核心线程的逻辑(去queue中poll值),所以说某一个线程在执行时是否是核心线程需要看当前线程数和核心线程数进行对比来看的,一个线程在生命周期中既有可能是核心线程也有可能是非核心线程。

二. 线程池核心概念

1. 线程池核心参数

推荐阅读
相关标签