网站首页 > 技术文章 正文
- 难度:中级
- 开发语言:Java
- 学习时间:10分钟
学习资料及总结
Java线程池核心(一):ThreadPoolExecutor的基本功能
- Executor 接口提供了执行 Runnable 任务的功能。
- ExecutorService 接口提供了关闭线程池、提交任务的功能。
- AbstractExecutorService 提供了线程池部分功能的公共实现。
- ThreadPoolExecutor 是线程池的完全实现。
- Future 提供了获取任务结果、取消任务、查询任务状态的功能。
Java线程池核心(二):ThreadPoolExecutor初始化过程
- ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
- corePoolSize:线程池中的核心线程数。
- maximumPoolSize:线程池中允许的最大线程数。
- keepAliveTime:空闲线程存活时间。
- unit:keepAliveTime时间单位。
- workQueue:工作队列。
- threadFactory:线程工厂。
- handler:任务拒绝策略。
Java线程池核心(三):ThreadPoolExecutor最大线程数
- 在线程池中,用 maximumPoolSize 来表示允许的最大线程数。
- int getMaximumPoolSize() 获取最大线程数。
- void setMaximumPoolSize(int maximumPoolSize) 设置最大线程数。
- 受最大线程数直接影响的是添加新线程。
- 在添加新线程时,如果为核心线程时,就跟核心线程数比;如果为非核心线程时,就跟最大线程数比。
Java线程池核心(四):ThreadPoolExecutor核心线程数
- 在线程池中,用 corePoolSize 来表示允许的最大线程数。
- int getCorePoolSize() 获取核心线程数。
- void setCorePoolSize(int corePoolSize) 设置核心线程数。
- 在设置核心线程数时,不仅仅只设置一个值而已,还补充了所需的核心线程。
- 当线程池在执行任务的时候,如果当前线程池中的线程数比核心线程数少,那么就往线程池中添加一个核心线程。
Java线程池核心(五):别让多余的空闲线程还占用着内存空间
- long getKeepAliveTime(TimeUnit unit)获取空闲线程存活时间。
- void setKeepAliveTime(long time, TimeUnit unit)设置空闲线程时间。
- void interruptIdleWorkers()中断所有空闲线程。
- void interruptIdleWorkers(boolean onlyOne)中断空闲线程,如果 onlyOne 为 true,则最多只中断一个线程,否则中断所有空闲线程。
- allowCoreThreadTimeOut 表示是否允许清除空闲的核心线程,即线程池中空闲的核心线程在 keepAliveTime 时间内没有执行任务的话就会被清除。
- boolean allowsCoreThreadTimeOut()获取是否允许清除空闲的核心线程。
- void allowCoreThreadTimeOut(boolean value)设置是否允许清除空闲的核心线程。
- 线程池默认不清除空闲的核心线程。
- 线程池中一共有 5 种线程数:允许的最大线程数、核心线程数、当前线程数、自线程池创建以来出现过的最大线程数、正在工作的线程数。
- int getMaximumPoolSize()允许的最大线程数。
- int getCorePoolSize()返回核心线程数。
- int getPoolSize()返回当前线程数。
- int getLargestPoolSize()返回自线程池创建以来出现过的最大线程数。
- int getActiveCount()返回正在工作的线程数。
- 线程池中有各种各样的线程数,它们都只有一个作用,那就是监控线程池。
Java线程池核心(八):从源码角度看shutdown方法做了什么
- void shutdown() 关闭线程池,继续执行完未完成的任务,不再接收新任务。
Java线程池核心(九):从源码角度看shutdownNow方法做了什么
- List<Runnable> shutdownNow() 立即关闭线程池,返回未执行的任务,不再接收新任务。
Java线程池核心(十):从源码上分析shutdown与shutdownNow区别
- void shutdown() 将线程池状态设置为 SHUTDOWN;List<Runnable> shutdownNow() 将线程池状态设置为 STOP。
- void shutdown() 中断所有空闲线程;List<Runnable> shutdownNow() 中断所有线程,包括正在工作的线程。
- void shutdown() 不返回未执行的任务;List<Runnable> shutdownNow() 返回未执行的任务。
- RUNNING:线程池正常运行。
- SHUTDOWN:调用 shutdown 方法后,将线程池状态设置为此值,所有空闲线程都将被中断。不再接收新任务,也不再添加新线程。
- STOP:调用 shutdownNow 方法后,将线程池状态设置为此值,所有线程都将被中断。不再接收新任务,也不再添加新线程。
- TIDYING:线程池处于此状态时,任务队列为空,线程数为 0。
- TERMINATED:线程池处于此状态时,表示线程池已关闭。
- 判断任务是否为 null,如果为 null,则抛出异常。
- 将 Runnable 或 Callable 转换为 RunnableFutrue。
- 执行任务。
- 返回 RunnableFutrue。
- boolean addWorker(Runnable firstTask, boolean core) 方法的作用是向线程池中添加线程。
- 线程池拒绝任务是通过 void reject(Runnable command) 方法来完成的。
- 任务拒绝策略一共有四种:AbortPolicy、DiscardPolicy、DiscardOldestPolicy、CallerRunsPolicy。
- AbortPolicy策略:始终抛出 RejectedExecutionException 异常。
- DiscardPolicy策略:什么也不做。
- DiscardOldestPolicy策略:当线程池还在运行时,抛弃处于任务队列头部的任务,添加被拒绝的任务。
- CallerRunsPolicy策略:使用调用者线程直接执行被拒绝的任务。
- Worker 类主要维护了要执行的任务和执行任务的线程。
- void runWorker(Worker w) 方法的作用就是反复从任务队列中获取任务并执行任务。
- Runnable getTask() 方法的作用是从任务队列中获取任务。
- long getCompletedTaskCount() 方法获取线程池已完成的任务总数。
- long getTaskCount() 方法获取线程池任务总数。
- BlockingQueue<Runnable> getQueue() 方法获取线程池任务队列。
- void purge() 方法的作用是清除任务队列中所有已取消的任务。
- boolean prestartCoreThread() 方法的作用是补充一个核心线程。
- int prestartAllCoreThreads() 方法的作用是补满核心线程,返回新增的核心线程数。
答疑
如果大家有任何疑问,请在下方留言或评论。
下一章
Java集合基础
学习小组
加入同步学习小组,共同交流与进步。
欢迎加入“人人都是程序员”编程圈子,与圈友一起交流讨论。
(此处已添加圈子卡片,请到今日头条客户端查看)
版权声明
原创不易,未经允许不得转载!
猜你喜欢
- 2024-10-22 线程池调优之动态参数配置 动态设置线程池大小
- 2024-10-22 java线程池参数及使用 java线程池的用法
- 2024-10-22 面试官:说说你对线程池的了解 线程池实现原理面试
- 2024-10-22 「每日分享」高阶程序员需要掌握的常见性能优化策略
- 2024-10-22 池化技术学习 池化方法
- 2024-10-22 「Java基础」「多线程」-线程池 java多个线程池
- 2024-10-22 线程池配置的常见误区 线程池配置参数有哪些
- 2024-10-22 创建线程池参数有哪些作用? 创建线程池的7个参数
- 2024-10-22 一文搞懂!多线程之间的通信及线程池
- 2024-10-22 码农大叔带你——解析线程池 线程池的主要处理流程
你 发表评论:
欢迎- 最近发表
-
- 吴谨言专访大反转!痛批耍大牌后竟翻红,六公主七连发力显真诚
- 港股2月28日物业股涨幅榜:CHINAOVSPPT涨1.72%位居首位
- 港股2月28日物业股午盘:CHINAOVSPPT涨1.72%位居首位
- 港股3月2日物业股涨幅榜:CHINAOVSPPT涨1.03%位居首位
- 港股3月2日物业股午盘:CHINAOVSPPT涨1.03%
- 天赋与心痛的背后:邓鸣贺成长悲剧引发的深刻反思
- 冯小刚女儿徐朵追星范丞丞 同框合照曝光惹人羡,回应网友尽显亲民
- “资本大佬”王冉:51岁娶小17岁童瑶,并承诺余生为娇妻保驾护航
- 港股3月2日物业股午盘:CHINAOVSPPT涨1.03%位居首位
- 「IT之家开箱」vivo S15 图赏:双镜云窗,盛夏风光
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)