默认策略,在需要拒绝任务时抛出RejectedExecutionException; 2、CallerRunsPolicy: 直接在 execute 方法的调用线程中运行被拒绝的任务,如果线程池已经关闭,任务将被丢弃; 3、DiscardPolicy: 直接丢弃任务; 4、DiscardOldestPolicy: 丢弃队列中等待时间最长的任务,并执行当前提交的任务,如果线程池已经关闭,任务将被丢弃。 我们...
TimeUnit.SECONDS,newArrayBlockingQueue<Runnable>(CAPACITY), namedThreadFactory);//设置线程池的拒绝策略为"CallerRunsPolicy"pool.setRejectedExecutionHandler(newThreadPoolExecutor.CallerRunsPolicy());//新建10个任务,并将它们添加到线程池中。for
同时,应确保系统有完善的异常处理机制,以应对可能出现的异常情况。 2. CallerRunsPolicy(调用者运行策略) 特点:当任务被拒绝时,它会被回退到调用者线程中执行。如果线程池已经关闭,则任务将被丢弃。 应用场景:此策略适用于那些不希望因为任务被拒绝而阻塞整个系统的场景。通过将任务回退到调用者线程执行,可以避免任务堆...
2. CallerRunsPolicy CallerRunsPolicy不抛弃任务,而是将任务的执行权交由调用者线程来执行。这种策略有助于减缓任务提交速度,从而控制系统负载。 示例代码 importjava.util.concurrent.*;publicclassCallerRunsPolicyExample{publicstaticvoidmain(String[]args){ThreadPoolExecutorexecutor=newThreadPoolExecutor(1,1,0L,TimeUnit...
CallerRunsPolicy(调用者运行策略):当触发拒绝策略时,只要线程池没有关闭,就由提交任务的当前线程处理。适用于不允许失败、对性能要求不高、并发量较小的场景。由于是调用者线程自己执行任务,当任务提交速度过快时,可能会阻塞后续任务执行,导致性能下降。 AbortPolicy(中止策略):当触发拒绝策略时,直接抛出拒绝执行的异常...
ThreadPoolExecutor.DiscardPolicy:丢弃任务,但是不抛出异常。ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务 ThreadPoolExecutor.CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务 三、线程池默认的拒绝策略 既然有四种拒绝策略可以选择,那么线程池的默认拒绝策略是什么呢?查看...
ThreadPoolExecutor.CallerRunsPolicy:调用执行自己的线程运行任务,也就是直接在调用execute方法的线程中运行(run)被拒绝的任务,如果执行程序已关闭,则会丢弃该任务。因此这种策略会降低对于新任务提交速度,影响程序的整体性能。如果你的应用程序可以承受此延迟并且你要求任何一个任务请求都要被执行的话,你可以选择这个策略。
ThreadPoolExecutor.CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务 1. 2. 3. 4. 线程池默认的拒绝策略 既然有四种拒绝策略可以选择,那么线程池的默认拒绝策略是什么呢?查看java.util.concurrent.ThreadPoolExecutor类的源码,我们可以看到: /**
线程池的常见拒绝策略有四种:AbortPolicy、CallerRunsPolicy、DiscardPolicy和DiscardOldestPolicy。 1. AbortPolicy(终止策略): AbortPolicy是线程池的默认拒绝策略,当线程池无法处理新的任务时,它会抛出RejectedExecutionException异常来拒绝任务。这种策略会立即抛出异常,不会进行任何处理。这也是最简单和最直接的拒绝策略。 2...
CallerRunsPolicy(调用者运行策略)一般在不允许失败的、对性能要求不高、并发量较小的场景下使用,因为线程...