网站首页 > 精选教程 正文
一、线程池创建方式
二、线程池创建参数
int corePoolSize,线程中的核心线程数,创建线程池时不会启动线程 prestartAllCoreThreads()方法就会启动核心数的线程
int maximumPoolSize, 运行的最大线程数
long keepAliveTime,线程空闲下来后,存活时间。线程数大于 corePoolSize才会有用
TimeUnit unit,存活时间的单位
BlockingQueue workQueue,保存任务的阻塞队列
ThreadFactory threadFactory, 创建线程的工厂,给新线程赋予名字
RejectedExecutionHandler handler,最大线程数和阻塞队列都满了, 饱和策略,
三、线程饱和策略
AbortPolicy:直接抛出异常
CallerRunsPolicy:用调用者所在的线程来执行任务
DiscardOldestPolicy:丢弃阻塞队列里最老的任务
DiscardPolicy:当前任务直接丢弃,不抛异常
自定义实现RejectedExecutionHandler
四、线程池的工作过程
线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。当一个线程无事可做,超过一定的时间(keepAliveTime)时,线程池会判断,如果当前运行的线程数大于 corePoolSize,那么这个线程就被停掉。所以线程池的所有任务完成后,它最终会收缩到 corePoolSize 的大小。并不是先加入任务就一定会先执行。假设队列大小为 10,corePoolSize 为 3,maximumPoolSize 为 6,那么当加入 20 个任务时,执行的顺序就是这样的:首先执行任务 1、2、3,然后任务 4~13 被放入队列。这时候队列满了,任务 14、15、16 会被马上执行,而任务 17~20 则会抛出异常。最终顺序是:1、2、3、14、15、16、4、5、6、7、8、9、10、11、12、13。
五、任务提交返回
- 无返回任务提交 execute
- 带返回任务提交 submit
六、5、关闭线程池
- shutdown() 设置线程池状态,只会中断所有没有执行任务的线程
- shutdownNow() 设置线程池状态,还会尝试停止正在运行或者暂停任务的线程
七、线程池合理配置
- 计算密集型:加密,大数分解,正则 。线程数适量小一点,最大推荐:机器的CPU核心数+1 Runtime.getRuntime().availableProcessors() 获取机器的CPU核心数,为啥加1:页缺失,当前线程需要执行的线程的数据全部加装到内存中了,可能当前的线程需要的数据在磁盘上,操作系统需要将磁盘的数据调度的内存中,当前线程会被挂起
- IO密集型:读取文件,数据库连接,网络通讯。线程数适当大一点,建议:机器的CPU核心数*2
- 混合型
八、系统预定义的线程池
工具类 :
ExecutorService newSingleThreadExecutor() // 创建单个线程池。线程池中只有一个线程
ExecutorService newFixedThreadPool() // 创建固定大小的线程池
ExecutorService newCachedThreadPool() // 缓存线程池,线程池的数量不固定,可以根据需求自动的更改数量。
ScheduledExecutorService newScheduledThreadPool()// 创建固定大小的线程,可以延迟或定时的执行任务。
WorkStealingPool // 基于ForkJoinPool实现
- 上一篇: Java的线程池是怎么回事?来看看这篇文章吧
- 下一篇: Java线程池详解
猜你喜欢
- 2024-12-03 java线程池实现原理以及应用场景说明
- 2024-12-03 Java线程池详解
- 2024-12-03 Java的线程池是怎么回事?来看看这篇文章吧
- 2024-12-03 Java线程池的实现原理,你清楚么?
- 2024-12-03 一文弄懂Java中线程池原理
- 2024-12-03 一文搞懂JAVA线程池工作原理
- 2024-12-03 「一文搞懂」Java线程池实现原理
- 2024-12-03 线程池原理最全详解(图文全面总结)
- 2024-12-03 java线程池原理浅析
- 2024-12-03 我画了25张图展示线程池工作原理和实现原理,建议先收藏再阅读
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)