Java线程池

2023-12-16 12:46:56

在执行一个任务时,往往通过直接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(最大线程数),则执行拒绝策略。

文章来源:https://blog.csdn.net/qq_58098264/article/details/135030148
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。