首页 > 试题广场 >

线程池运行流程,参数,策略

[问答题]
请简述一下线程池的运行流程,使用参数以及方法策略等
提交任务后会判断核心线程是否已满,否则创建线程执行任务。是则判断队列是否已满,否则加入队列等待,是则线程池是否已满,否则创建线程执行任务,是则按照拒绝策略处理无法执行的任务
发表于 2019-05-05 15:18:15 回复(0)
更多回答
发表于 2019-10-30 21:39:46 回复(0)

首先判断核心线程池里的线程是否都在执行任务,如果不是则直接从核心线程池中创建一个线程来执行,如果都在忙则判断任务队列是否也满了,没满的话将任务放进去等待执行,满了就判断线程池的全部线程是否都在忙,如果都在忙就交给饱和策略来处理,否则就创建一个线程来帮助核心线程处理任务。

       重要参数:   

       CorePoolSize:核心线程池大小

       MaximumPoolSize:最大线程数

       WorkQueue:任务缓存队列

       ThreadFactory:线程工厂,主要用来创建线程

       Handler:饱和处理策略

 

      饱和处理策略:

      ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。

    ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。

    ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)

    ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务

发表于 2019-04-17 16:37:32 回复(0)
发表于 2019-04-03 09:32:29 回复(1)
提交任务并进入队列后,如果核心线程没有被全部占用,核心线程会执行该任务,如果核心线程全部被占用并且队列没有缓存满,会进入队列等待,如果队列满了并且定运行的总线程数未超过定义的最大线程数目,会创建救急线程执行任务,如果超过了最大线程数会实施救急策略,如第一种:抛出异常、第二种:丢弃任务、第三种:丢弃最队列中最老的任务、第四种:哪个线程发出的任务,由它自己执行
发表于 2022-10-22 08:58:02 回复(0)
提交任务后会判断核心线程是否已满,否则创建线程执行任务。是则判断队列是否已满,否则加入队列等待,是则线程池是否已满,否则创建线程执行任务,是则按照拒绝策略处理无法执行的任务
发表于 2019-04-30 19:14:20 回复(0)
提交任务后会判断核心线程是否已满,否则创建线程执行任务。是则判断队列是否已满,否则加入队列等待,是则线程池是否已满,否则创建线程执行任务,是则按照拒绝策略处理无法执行的任务
发表于 2019-02-22 10:36:04 回复(0)