网站首页 > java教程 正文
以Java线程池为例,简单了解下线程池的原理。
之所以要使用线程池,本质原因还是线程的创建和销毁太耗资源。
Java线程池主要核心类:java.util.concurrent.ThreadPoolExecutor。
它的构造函数需要我们重点关注下:
public ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
每个入参含义如下:
- corePoolSize:核心线程数(即使线程空闲,也要保留的线程数)
- maximumPoolSize:最大线程数
- keepAliveTime & unit:超出corePoolSize的那部分线程,最大保留时间及其时间单位
- workQueue:线程队列
- threadFactory:线程工厂
- handler:线程拒绝策略
这些参数的使用原理参考如下图:
其对应的核心代码逻辑如下:
BlockingQueue阻塞队列:
- ArrayBlockingQueue 数组实现的阻塞队列 构造函数需指定队列大小 入队和出队共用一把锁
- LinkedBlockingQueue 链表实现的阻塞队列 入队和出队是用不同的锁
- SynchronousQueue Each insert operation must wait for a corresponding remove operation by another thread, and vice versa. A synchronous queue does not have any internal capacity, not even a capacity of one.
RejectedExecutionHandler拒绝策略:
- AbortPolicy:抛出RejectedExecutionException异常
- DiscardPolicy:啥也不做(意味着任务被丢弃了)
- DiscardOldestPolicy:获取队列头的一条数据,然后丢掉,将当前任务放入队列
- CallerRunsPolicy:由调用者自己去执行这个任务
猜你喜欢
- 2024-09-19 Java线程池的四种用法与使用场景(java线程池的原理和实现)
- 2024-09-19 尚学堂百战程序员:Java中的线程池
- 2024-09-19 Java线程池深度揭秘(java线程池入门)
- 2024-09-19 Java线程池(java线程池参数详解)
- 2024-09-19 如何更好的使用JAVA线程池(java中线程池的使用)
- 2024-09-19 史上最详细、最系统、最全面Java线程池解析
- 2024-09-19 好文推荐:深入分析Java线程池的实现原理
- 2024-09-19 Java的线程池是怎么回事?来看看这篇文章吧
- 2024-09-19 Java Web应用调优线程池:没你想的那么复杂
- 2024-09-19 java 线程池看这一篇就够了(java线程池的使用方法)
你 发表评论:
欢迎- 最近发表
-
- class版本不兼容错误原因分析(class更新)
- 甲骨文Oracle公司为Java的最新LTS版本做出改进
- 「版本发布」Minecraft Java开发版 1.19.4-pre1 发布
- java svn版本管理工具(svn软件版本管理)
- 我的世界1.8.10钻石在第几层(我的世界1.7.2钻石在哪层)
- Java开发高手必备:在电脑上轻松切换多个JDK版本
- 2022 年 Java 开发报告:Java 8 八年不到,开发者都在用什么?
- 开发java项目,选择哪个版本的JDK比较合适?
- Java版本选型终极指南:8 vs 17 vs 21特性对决!大龄程序员踩坑总结
- POI Excel导入(poi excel导入附件)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)