Java线程池拒绝策略
发布网友
发布时间:2024-10-05 22:00
我来回答
共1个回答
热心网友
时间:2024-10-07 03:09
Java线程池在处理超过最大容量时,会采用预定义或自定义的拒绝策略。默认情况下,ThreadPoolExecutor提供了四种策略:
DiscardPolicy:任务被拒绝时不采取任何操作,直接丢弃,源码中表现为一个空的rejectedExecution方法。
AbortPolicy:拒绝时抛出RejectedExecutionException,中断执行流程,线程会捕获这个异常。
CallerRunsPolicy:由提交任务的线程直接执行被拒绝的任务,workQueue中的任务在该线程中运行。
DiscardOldestPolicy:丢弃最旧的任务后尝试重新执行当前任务,workQueue为空或线程池关闭时,当前任务会被丢弃。
要自定义拒绝策略,可以实现RejectedExecutionHandler接口,如示例中所示,将自定义的handler传递给ThreadPoolExecutor。这样,当线程池无法执行新任务时,就会调用自定义的rejectedExecution方法来处理策略。