3.1 线程池所允许的最大线程个数 3.2 maxPoolSize>当线程数>=corePoolSize,且任务队列已满时。线程池会创建新线程来处理任务。 3.3 当线程数=maxPoolSize,且任务队列已满时,线程池会根据handle策略处理,默认是AbortPolicy 丢弃任务,抛运行时异常。 4. keepAliveTime:线程空闲保持时间 4.1 当线程空闲时间达到keep...
三、线程池创建2个非核心线程执行任务0、任务5; 四、线程池开始处理任务7,但是此时没有空闲线程,4个线程(2个核心线程和2个非核心线程)都在执行任务中,且工作队列已经满了(只能放3个任务),所以执行拒绝策略,预定的策略是直接丢弃且抛出RejectedExecutionException异常;任务8、任务9同理; 五、差不多2秒(任务时间...
最大线程数 maximumPoolSize 的值不能小于核心线程数 corePoolSize,否则在程序运行时会报 IllegalArgumentException 非法参数异常,如下图所示: 参数3:keepAliveTime 空闲线程存活时间,当线程池中没有任务时,会销毁一些线程,销毁的线程数=maximumPoolSize(最大线程数)-corePoolSize(核心线程数)。 还是以大户人家为例,...
使用无界任务队列,线程池的任务队列可以无限制的添加新的任务,而线程池创建的最大线程数量就是你corePoolSize设置的数量,也就是说在这种情况下maximumPoolSize这个参数是无效的,哪怕你的任务队列中缓存了很多未执行的任务,当线程池的线程数达到corePoolSize后,就不会再增加了;若后续有新的任务加入,则直接进入队列等...
上图的各个参数,解释如下:参数一:corePoolSize:线程池中的常驻核心线程数,在创建了线程池后,当有请求任务来之后,就会安排池中的线程去执行请求任务,近视理解为今日当值线程,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放入到缓存队列当中.参数二:maximumPoolSize:线程池能够容纳同时执行的最大线程...
1、corePoolSize:当有新任务时,如果线程池中线程数没有达到线程池的基本大小,则会创建新的线程执行任务,否则将任务放入阻塞队列。当线程池中存活的线程数总是大于 corePoolSize 时,应该考虑调大 corePoolSize。 2、maximumPoolSize:当阻塞队列填满时,如果线程池中线程数没有超过最大线程数的,则会创建新的线程运行...
SynchronousQueue 不缓存任务的阻塞队列,直接执行任务,没有线程可以用时会新建线程,直到线程数达到线程池最大线程数(MaxnumPoolSize)时,执行拒绝策略 PriorityBlockingQueue 具有优先级的无界阻塞队列,优先级通过参数Comparator实现 threadFactory 线程工厂 创建一个新的线程时使用的工厂,可以用来设定线程名,是否为守护线程(da...
一、线程池 二、线程池的8个参数 corePoolSize: 核心线程数,默认不会被回收 maximumPoolSize: 最大线程数 keepAliveTime: 非核心线程存活时间 TimeUnit: 非核心线程存活时间的时间单位 BlockingQueue: 存储任务的阻塞队列 ThreadFactory: 生产线程的工厂
1)降低系统资源得消耗,重复创建和销毁线程将消耗系统资源 2)通过线程池有效的管理线程,避免无限制地创建线程 3)可以创建定时或延时任务 二.线程池的主要参数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ...