网站首页 > java教程 正文
- 难度:中级
- 开发语言: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集合基础
学习小组
加入同步学习小组,共同交流与进步。
欢迎加入“人人都是程序员”编程圈子,与圈友一起交流讨论。
(此处已添加圈子卡片,请到今日头条客户端查看)
版权声明
原创不易,未经允许不得转载!
- 上一篇: Java线程池详细介绍——原理及使用
- 下一篇: 深入理解Java线程池,这一篇就够了
猜你喜欢
- 2024-09-16 java-线程池详解(java线程池入门)
- 2024-09-16 线程进阶:实战应用之Java线程池全面解析
- 2024-09-16 Java开发之高并发必备篇(七)——线程池
- 2024-09-16 Java-线程池专题(什么是线程池,如何使用,为什么要用)
- 2024-09-16 Java线程之Executors线程池的原理和使用
- 2024-09-16 Java的四种线程池的使用,以及自定义线程工厂
- 2024-09-16 探索JAVA并发 - 线程池详解(java多线程并发编程 线程池)
- 2024-09-16 Java线程池的概念及使用(java 线程池原理详解)
- 2024-09-16 Java线程池核心(十一):线程池状态
- 2024-09-16 Java 线程池(java线程池原理)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)