线程池执行原理
2021-01-18 15:16:14 3 举报
线程池执行原理
作者其他创作
大纲/内容
KeepAliveTime
ThreadPoolExecutor
MaximumPoolSize
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。 ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务
阻塞队列,一般有三种,1、基于数组的先进先出队列 ArrayBlockingQueue2、基于链表的先进先出队列,LinkedBlockingQueue,最大为Integer.MAX3、直接创建一个线程来执行新任务 synchronousQueue
问题1:何时需要使用最大线程数?答:当任务数大于核心线程数并且缓存队列中已满,则会判断是否大于最大线程数,不大于则创建新的线程。
线程工厂,用于创建线程
空闲线程存活的时间
BlockingQueue
问题3:当队列足够大时,是不是最大线程数就没有用了?答:当任务数大于核心线程数,就会往队列中存放数据,触发使用最大线程数的条件是,队列满了,如果是无界队列,就不会满,所以就不会触发最大线程数。只能等到core线程执行完毕,释放的任务。
RejectedExecutionHandler
单位
问题2:任务拒绝策略合适触发?答:如上一提问,当创建的新的线程数,也大于了最大线程数,则采用拒绝策略。
corePoolSize
ThreadFactory
Unit
收藏
0 条评论
下一页