对线程池的理解

目录

什么是线程池:

线程池所涉及到的类:

线程池的参数:

corePoolSize:

maximumPoolSize:

keepAliveTime、TimeUnit:

BlockingQueue:

ThreadFactory:

RejectedExecutionHandler:


什么是线程池:

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

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

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

用。

线程池所涉及到的类:

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

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

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

线程池的参数:

线程池的参数可分为: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

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值