rejected=newThreadPoolExecutor.DiscardOldestPolicy();//将最早进入队列的任务删,之后再尝试加入队列 rejected=newThreadPoolExecutor.CallerRunsPolicy();//如果添加到线程池失败,那么主线程会自己去执行该任务 //使用的线程池 ExecutorServicethreadPool=null; threadPool=Executors.newCachedThreadPool();//有缓冲的线程池...
workQueue:一个阻塞队列,用来存储等待执行的任务,这个参数的选择也很重要,会对线程池的运行过程产生重大影响,一般来说,这里的阻塞队列有以下几种选择: ArrayBlockingQueue; LinkedBlockingQueue;SynchronousQueue; ArrayBlockingQueue和PriorityBlockingQueue使用较少,一般使用LinkedBlockingQueue和Synchronous。线程池的排队策略与B...
功能:当触发拒绝策略时,只要线程池没有关闭,就由提交任务的当前线程处理。 使用场景:一般在不允许失败的、对性能要求不高、并发量较小的场景下使用,因为线程池一般情况下不会关闭,也就是提交的任务一定会被运行,但是由于是调用者线程自己执行的,当多次提交任务时,就会阻塞后续任务执行,性能和效率自然就慢了。 Abort...
三、使用 ThreadPoolExecutor 自定义线程池参数 创建1 11个线程池 , 核心线程数是2 22, 最大线程数是3 33, 则非核心线程 0 ~ 1 个 , 非核心线程最大空闲存活时间 60 秒 , 阻塞队列最大存放 10 个元素 , 拒绝策略设置为抛出异常方式 , 如果阻塞队列装满 , 再次尝试执行新任务时 , 会抛出异常 ; 代码...
handler:拒绝策略,当队列任务已满,且线程数量达到最大线程数,新进入的任务会执行这个拒绝策略来选择丢弃哪个任务,线程池提供了四种默认的拒绝策略。 线程工厂ThreadFactor,线程池中默认给定了一个线程工厂DefaultThreadFactory,线程工厂的作用是用于创建线程,自己创建线程工厂时需要实现ThreadFactor接口,该接口中只有一个方法...
线程池的饱和策略,当阻塞队列满了,且没有空闲的工作线程,如果继续提交任务,必须采取一种策略处理该任务。 5)、线程池的饱和策略 1)AbortPolicy 直接抛出异常,默认策略; 2)CallerRunsPolicy 用调用者所在的线程来执行任务 3)DiscardOldestPolicy 丢弃阻塞队列中靠最前的任务,并执行当前任务 ...
当线程数量达到corePoolSize,且workQueue队列塞满任务了之后,继续创建线程,当线程池中的线程数量到达这个数字时,新来的任务会执行拒绝策略。 keepAliveTime:表示线程没有任务执行时最多能保持多少时间会被回收,注意,这个参数控制的是超过corePoolSize之后的“临时线程”的存活时间。 unit:参数 keepAliveTime 的时间单位...
workQueue - 当没有空闲核心线程时,新来任务会加入到此队列排队,队列满会创建救急线程执行任务 threadFactory 线程工厂 - 可以定制线程对象的创建,例如设置线程名字、是否是守护线程等 handler 拒绝策略 - 当所有线程都在繁忙,workQueue 也放满时,会触发拒绝策略 抛异常 java.util.concurrent.ThreadPoolExecutor.AbortPol...
unit 上面的参数的单位 workQueue 阻塞队列 threadFactory 创建线程的工厂 handler 拒绝策略 一个任务被提交到线程池的过程: 从上面的流程图中可以引申出以下几个问题,核心线程数要怎么设置;阻塞队列有几种;拒绝策略有几种; 先看阻塞队列及决策策略 阻塞队列 ...
maximumPoolSize(线程池的最大数量):线程池允许创建的最大线程数。 阻塞队列已满,线程数小于maximumPoolSize便可以创建新的线程执行任务。 如果使用无界的阻塞队列,该参数没有什么效果。 workQueue(工作队列):用于保存等待执行的任务的阻塞队列。 ArrayBlockingQueue:基于数组结构的有界阻塞队列,按FIFO(先进先出)原则对...