首先判断核心线程池里的线程是否都在执行任务,如果不是则直接从核心线程池中创建一个线程来执行,如果都在忙则判断任务队列是否也满了,没满的话将任务放进去等待执行,满了就判断线程池的全部线程是否都在忙,如果都在忙就交给饱和策略来处理,否则就创建一个线程来帮助核心线程处理任务。
重要参数:
CorePoolSize:核心线程池大小
MaximumPoolSize:最大线程数
WorkQueue:任务缓存队列
ThreadFactory:线程工厂,主要用来创建线程
Handler:饱和处理策略
饱和处理策略:
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务