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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!