线程池基础知识点

线程池

优势:

  • 提⾼线程的利⽤率
  • 提⾼响应速度
  • 便于统⼀管理线程对象
  • 可控制最⼤并发数

线程池的具体设计思想:

  • 核⼼池的⼤⼩
  • 线程池的最⼤容量
  • 等待队列
  • 拒绝策略

线程池启动的时候会按照核⼼池的数来创建初始化的线程对象 2 个。

开始分配任务,如果同时来了多个任务, 2 个线程对象都被占⽤了,第 3 个以及之后的任务进⼊等待队列,当前有线程完成任务恢复空闲状态的时候,等待队列中的任务获取线程对象。

如果等待队列也占满了,⼜有新的任务进来,需要去协调,让线程池再创建新的线程对象,但是线程池不可能⽆限去创建线程对象,⼀定会有⼀个最⼤上限,就是线程池的最⼤容量。

如果线程池已经达到了最⼤上限,并且等待队列也占满了,此时如果有新的任务进来,只能选择拒绝,并且需要根据拒绝策略来选择对应的⽅案。

ThreadPoolExecutor

直接实例化 ThreadPoolExecutor ,实现定制化的线程池,⽽不推荐使⽤ Executors 提供的封装好的⽅法,因为这种⽅式代码不够灵活,⽆法实现定制化。

ThreadPoolExecutor 核⼼参数⼀共有 7 个

  • corePoolSize:核⼼池的⼤⼩
  • maximumPoolSize:线程池的最⼤容量
  • keepAliveTime:线程存活时间(在没有任务可执⾏的情况下),必须是线程池中的数量⼤于 corePoolSize,才会⽣效
  • TimeUnit:存活时间单位
  • BlockingQueue:等待队列,存储等待执⾏的任务
  • ThreadFactory:线程⼯⼚,⽤来创建线程对象
  • RejectedExecutionHandler:拒绝策略

1、AbortPolicy:直接抛出异常
2、DiscardPolicy:放弃任务,不抛出异常
3、DiscardOldestPolicy:尝试与等待队列中最前⾯的任务去争夺,不抛出异常
4、CallerRunsPolicy:谁调⽤谁处理

线程池 3 ⼤考点

1、Executors ⼯具类的 3 种实现

ExecutorService executorService = Executors.newSingleThreadExecutor();
ExecutorService executorService = Executors.newFixedThreadPool(5);
ExecutorService executorService = Executors.newCachedThreadPool();

2、7 个参数

  • corePoolSize:核⼼池的⼤⼩
  • maximumPoolSize:线程池的最⼤容量
  • keepAliveTime:线程存活时间(在没有任务可执⾏的情况下),必须是线程池中的数量⼤于 corePoolSize,才会⽣效
  • TimeUnit:存活时间单位
  • BlockingQueue:等待队列,存储等待执⾏的任务
  • ThreadFactory:线程⼯⼚,⽤来创建线程对象
  • RejectedExecutionHandler:拒绝策略

3、4 种拒绝策略
1、AbortPolicy:直接抛出异常
2、DiscardPolicy:放弃任务,不抛出异常
3、DiscardOldestPolicy:尝试与等待队列中最前⾯的任务去争夺,不抛出异常
4、CallerRunsPolicy:谁调⽤谁处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是JAVA面试基础知识的分类及详细知识点: 1. Java基础知识 - 数据类型:基本数据类型和引用数据类型 - 变量、常量和关键字 - 运算符:算术运算符、比较运算符、逻辑运算符、位运算符、三目运算符 - 流程控制语句:if-else语句、switch语句、for循环、while循环、do-while循环、break语句、continue语句 - 数组:一维数组和二维数组 - 方法:方法的定义、方法的参数、方法的返回值、方法的重载 - 类和对象:类的定义、对象的创建、构造方法、成员变量和成员方法、静态变量和静态方法、封装、继承、多态 - 接口和抽象类:接口的定义、接口的实现、抽象类的定义、抽象类的继承 - 异常处理机制:异常的定义、异常的分类、try-catch语句、finally语句、throw语句、throws语句 2. Java高级知识 - 反射机制:Class类、Constructor类、Method类、Field类、动态代理 - 泛型:泛型的定义、泛型类、泛型接口、泛型方法、泛型通配符、类型擦除 - 多线程:线程的创建、线程的状态、线程的同步、线程的通信、线程池、锁、死锁、并发包 - IO流:字节流和字符流、文件读取和文件写入、序列化和反序列化、缓冲流、转换流、管道流、NIO - 注解:注解的定义、注解的分类、元注解、自定义注解、注解的使用 - Lambda表达式:Lambda表达式的定义、语法、函数式接口、方法引用、构造方法引用 - Stream API:Stream的定义、Stream的中间操作和终止操作、并行流、收集器 - 设计模式:单例模式、工厂模式、抽象工厂模式、建造者模式、代理模式、适配器模式、装饰者模式、观察者模式、模板方法模式、策略模式、状态模式、责任链模式、享元模式 以上就是Java面试基础知识的分类及详细知识点,希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值