Java线程池

在执行一个任务时,往往通过直接new Thread()方法来创建线程,这种方式有很多弊端,因此引入了线程池的概念。以下内容将简单介绍线程池的一些基本内容。

1 线程池的优势

  • 降低资源消耗。使用线程池可以减少创建和销毁线程造成的资源消耗。
  • 提高系统响应速度。当有任务到达时,不需要等待创建新线程,直接执行。
  • 可管理性。进行统一的分配,监控,避免大量的线程间因互相抢占系统资源导致的阻塞现象。

2 线程池的分类

以上简单介绍了线程池的优势,那么怎样创建使用线程池呢?以下内容是线程池的四种创建方式:

类型创建方式
创建线程数目动态增长的线程池newCachedThreadPool
指定线程数量的线程池newFixedThreadPool
只包含单个线程的线程池newSinfleThreadExecutor
自定义线程池
ThreadPoolExecutor

3 线程池的参数

若将一个线程池比喻为一家公司。

1)corePoolSize

线程池核心线程数。即使这些线程处于空闲状态,他们也不会被销毁。类似于公司中的正式员工数量。

2)maximumPoolSize

线程池中最大线程数。类似于公司中的正式员工数量加上临时工数量。

3)keepAliveTime

空闲线程的存活时间。若一个线程处于空闲状态,并且线程数量多余线程池核心线程数,则在指定时间后,线程将销毁。类似于公司中临时工允许的空闲时间。

4)unit

时间单位。

5)workQueue

工作队列。

6)threadFactory

线程工厂。

7)rejectedExecutionHandler

拒绝策略。主要有以下几种拒绝策略:

拒绝策略作用
AbortPolicy直接抛出异常
CallerRunsPolicy调用者负责处理
DiscardOldestPolicy丢弃队列中最老的线程
DiscardPolicy直接丢弃该线程

4 线程池的工作原理

线程池的工作原理可以主要总结为以下几个步骤:

1)刚开始创建线程池时,线程池中无线程,等待有任务时,创建线程。

2)提交一个任务时,如果当前线程数量<corePoolSize(核心线程数),直接创建线程执行任务;

3)如果当前线程数量>corePoolSize(核心线程数),放入等待队列;

4)如果阻塞队列已满,但是当前线程数<maximumPoolSize(最大线程数),则创建线程执行任务;

5)如果当前线程数>maximumPoolSize(最大线程数),则执行拒绝策略。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值