ThreadPoolExector线程池 红太狼 2023-07-24 08:49 4阅读 0赞 ## 线程池的七大参数 ## public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { ...... } * corePoolSize:线程池中常驻的核心线程数 * maxiumPoolSize:能够容纳的最大线程数,必须大于等于1。 * keepAliveTime:多余空闲线程的存活时间。当前线程数量超过corePoolSize时,当空闲时间达到keepAliveTime时,多余线程会被销毁直到只剩下corePoolSize个线程位置。 * unit:keepAliveTime的单位 * workQueue:任务队列,被提交但未被执行的任务 * threadFactory:生成线程池中工作线程的线程工厂,用于创建线程,默认即可。 * handler:拒绝策略,表示当队列满了并且工作线程大于等于最大线程数时,如何拒绝请求。 ## 线程池底层工作原理 ## 1、在创建线程池后,等待提交过来的任务请求 2、当调用execute()方法添加一个请求任务时,线程池会做如下判断: 2.1、如果正在运行的线程数量小于corePoolSize,那么马上创建线程运行这个任务; 2.2、如果正在运行的线程数大于或等于corePoolSize,那么将这个任务放入队列; 2.3、如果这个时候队列满了且正在运行的线程数量还小于maxmunPoolSize,那么还是要创建非核心线程立刻运行这个任务; 2.4、如果队列满了且正在运行的线程数量大于或等于maxmumPoolSize,那么线程池会启动饱和拒绝策略来执。 3、当一个线程完成任务时,它会从队列中取下一个任务来执行。 4、当一个线程无事可做超过一定时间(keepAliveTime)时,线程池会判断: 如果当前运行的线程数大于core Pool Size,那么这个线程就会被停掉,索所以线程池的所以任务完成后它最终会收缩到corePoolSize打大小。 ## 线程池的四种拒绝策略 ## * AbortPolicy(默认):直接抛出RejectedException。 * CallerRunsPolicy:不会抛弃任务也不会抛出异常,而是回退给调用者 * DiscardOldestPolicy:丢弃等待最久的任务。 * DiscardPolicy:直接丢弃任务,不做任何处理。 ## 如何合理配置线程池 ## 1. CPU密集型:CPU核数+1个线程的线程池 2. IO密集型 * IO密集型任务线程不是一直在执行任务,则应配置尽可能多的线程:CPU核数\*2 * 大部分线程都阻塞,故需要多配置线程数:CPU核数/(1-阻塞系数),阻塞系数在0.8-0.9之间
相关 ThreadPoolExector线程池 线程池的七大参数 public ThreadPoolExecutor(int corePoolSize, 红太狼/ 2023年07月24日 08:49/ 0 赞/ 5 阅读
相关 Java 线程池、Runnable线程池、Callable线程池 线程池: 其实就是一个容纳多个线程的容器,其中的线程可以反复的使用,省去了频繁创建和销毁过程对象的操作,无需反复创建线程面消耗过多资源。 为什么要用线程池: 合理 青旅半醒/ 2023年02月26日 12:30/ 0 赞/ 52 阅读
相关 线程、线程池 创建线程的3种方法: package com.frank.threadPool.createThread; / @author 小石潭记 布满荆棘的人生/ 2022年10月22日 04:27/ 0 赞/ 385 阅读
相关 线程池 1.所谓线程池,就是程序的初始化阶段,就预先创建一批线程,每个线程都做好准备干活; 2.然后有一个任务列表,一开始为空,当有任务来了,就往任务列表里面添加;这个任务列表 痛定思痛。/ 2022年06月13日 13:22/ 0 赞/ 330 阅读
相关 线程池 西施越溪女,明艳光云海 最近用线程池和不用线程池做了个速度的测试,在这里备注下: 结果是速度不相上下; public static void main(Str 妖狐艹你老母/ 2022年05月20日 02:35/ 0 赞/ 284 阅读
相关 线程池 线程池 Java里面线程池的顶级接口是 java.util.concurrent.Executor , 但是严格意义上讲 Executor并不是一个线程池,而只是一个 迈不过友情╰/ 2022年03月06日 14:34/ 0 赞/ 402 阅读
相关 线程池 线程池 > 从字面义上来讲,是指管理一组同构工作线程的资源池。线程池是与工作队列密切相关的,其中在工作队列中(Worker Queue)保存了所有等待执行的任务。工作者( 清疚/ 2021年12月11日 03:35/ 0 赞/ 389 阅读
相关 线程池 可preStart一个或全部core thread 0,小于core则来一个任务建一个线程(firstTask),队列,额外线程,拒绝 一个AtomicInteger的 今天药忘吃喽~/ 2021年11月23日 03:40/ 0 赞/ 412 阅读
相关 线程池 1、先创建线程池 import java.util.concurrent.ArrayBlockingQueue; import java.util.concu 拼搏现实的明天。/ 2021年11月09日 14:28/ 0 赞/ 422 阅读
还没有评论,来说两句吧...