• 对线程池的理解


    目录

    什么是线程池:

    线程池所涉及到的类:

    线程池的参数:

    corePoolSize:

    maximumPoolSize:

    keepAliveTime、TimeUnit:

    BlockingQueue:

    ThreadFactory:

    RejectedExecutionHandler:


    什么是线程池:

    线程池是一种技术,使用线程池来管理维护线程,比手动创建更加安全,快捷,因为线程是一种稀

    缺资源,无限制的过度创建,可能会威胁到系统的稳定性,同时线程的创建和销毁都会付出额外的

    性能消耗,而线程池就像一个蓄水的池子,将线程都存放在里面,到需要的时候,可以直接去使

    用。

    线程池所涉及到的类:

    Java标准库提供了如下几个类或接口,来操作并使用线程

    • ExecutorService接口:来进行管理操作线程池;
    • Executors类:用于创建线程池的工具类;
    • ThreadPoolExecutor及其子类:线程池;
      1. public class Pools {
      2. public static void main(String[] args) {
      3. // 根据任务调整线程的线程池
      4. ExecutorService pool1 = Executors.newCachedThreadPool();
      5. // 线程数固定的线程池
      6. ExecutorService pool2 = Executors.newFixedThreadPool(5);
      7. // 单线程的线程池
      8. ExecutorService pool3 = Executors.newSingleThreadExecutor();
      9. // 延迟执行的线程池
      10. ExecutorService pool4 = Executors.newScheduledThreadPool(2);
      11. }
      12. }

    通过各个线程池的源码查看,他们获得或少都有着相同的参数

    线程池的参数:

    线程池的参数可分为:corePoolSize、maximumPoolSize、keepAliveTime、TimeUnit、

    BlockingQueue、ThreadFactory RejectedExecutionHandler

    corePoolSize:核心线程数

    核心线程数,也就是线程池中最小维护的线程池。

    在  newFixedThreadPool 线程池中,核心线程是与最大线程数相同的,

    newCachedThreadPool 线程池中,核心线程数为0,

    newSingleThreadExecutor  线程中核心线程数为1,

    newScheduledThreadPool线程池中,核心线程数与传入的参数相同。

    maximumPoolSize:最大线程数

    最大线程数,就是线程池中,最多可以维护的线程数。

    在  newFixedThreadPool 线程池中,核心线程是与最大线程数相同的,都等于传入的参数

    newCachedThreadPool 线程池中,最大线程数等于Integer.MAX_VALUE,即 1247483647

    newSingleThreadExecutor  线程中,最大线程数等于1,

    newScheduledThreadPool线程池中,最大线程数与传入的参数相同。

    keepAliveTime、TimeUnit:非核心线程最多可以存活的时间

    在  newFixedThreadPool 线程池中,非核心线程可以存活时间为:0

    newCachedThreadPool 线程池中,非核心线程可以存活时间为:60 秒

    newSingleThreadExecutor  线程中,非核心线程可以存活时间为:0

    newScheduledThreadPool线程池中,非核心线程可以存活时间为:0

    BlockingQueue:工作队列

    工作队列,或者说是等待队列,用来储存等待中的任务。

    常见的等待队列有 :

    • ArrayBlockingQueue 固定长度,基于数组实现的队列
    • LinkedBlockingQueue 是一个无界的,基于链表实现的队列
    • DelayedWorkQueue 是基于堆结构的延迟队列,基于数组实现,初始容量为 16
    • PriorityBlockingQueue 优先级队列,是无界的队列
    • SynchronousQueue同步队列,不存储元素的工作队列。

    在  newFixedThreadPool 线程池中,工作队列为:LinkedBlockingQueue

    在  newCachedThreadPool 线程池中,工作队列为:SynchronousQueue

    在  newSingleThreadExecutor  线程中,工作队列为:LinkedBlockingQueue

    在  newScheduledThreadPool线程池中,工作队列为:DelayedWorkQueue

    ThreadFactory:线程工厂

    线程工厂,创建和销毁线程,以及设置线程的名称

    RejectedExecutionHandler:拒绝策略

    常见的拒绝策略有:

    • AbortPolicy  默认拒绝策略,丢弃任务并抛出 RejectedExecutionException
    • DiscardPolicy :丢弃任务但是不抛出异常
    • DiscardOidestPolicy : 丢弃最旧的的任务,即最早进入队列的任务
    • CallerRunsPolicy  :交给调用线程池的线程处理

    在  newFixedThreadPool 线程池中,拒绝策略为:AbortPolicy

    在  newCachedThreadPool 线程池中,拒绝策略为:AbortPolicy

    在  newSingleThreadExecutor  线程中,拒绝策略为:AbortPolicy

    在  newScheduledThreadPool线程池中,拒绝策略为:AbortPolicy

  • 相关阅读:
    音视频同步测试方法
    【Java牛客刷题】入门篇(04)
    231003-四步MacOS-iPadOS设置无线竖屏随航SideCar
    计算机毕业设计(83)php小程序毕设作品之服务预约家政小程序系统
    理解傅里叶变换
    Linux centos7创建文件
    机器学习(11)---降维PCA
    AI绘画本地部署Stable Diffusion web UI
    C++并发与多线程(7) | 创建多个线程时数据共享的问题
    机器学习之广义增量规则(Generalized Delta Rule)
  • 原文地址:https://blog.csdn.net/m0_66944273/article/details/127102848