怎么在天山建设云网站备案怎么查询网站建设时间
在 Java 线程池中,常见的拒绝策略:
- AbortPolicy(中止策略) 
- 特点:直接抛出 
RejectedExecutionException异常来拒绝新任务的提交。 - 应用场景:适用于对系统的稳定性要求较高,不希望丢失任务,但希望能快速发现任务提交失败的情况。
 
 - 特点:直接抛出 
 
ThreadPoolExecutor.AbortPolicy abortPolicy = new ThreadPoolExecutor.AbortPolicy();
 
- CallerRunsPolicy(调用者运行策略)
 
- 特点:在调用者线程中直接执行被拒绝的任务。
 - 应用场景:适用于系统不希望丢弃任务,并且对任务的执行延迟要求不高的情况。当线程池已经饱和时,新任务会在提交任务的线程中执行,可能会导致提交任务的线程阻塞。
 
ThreadPoolExecutor.CallerRunsPolicy callerRunsPolicy = new ThreadPoolExecutor.CallerRunsPolicy();
 
- DiscardPolicy(丢弃策略)
 
- 特点:默默丢弃无法处理的任务,不抛出异常。
 - 应用场景:适用于可以容忍任务丢失的情况,例如不重要的日志处理任务。
 
ThreadPoolExecutor.DiscardPolicy discardPolicy = new ThreadPoolExecutor.DiscardPolicy();
 
- DiscardOldestPolicy(丢弃最旧策略)
 
- 特点:丢弃任务队列中最旧的未处理任务,然后将新任务加入队列重新尝试执行。
 - 应用场景:适用于任务的重要性相对较低,且希望尽量处理新提交的任务的情况。
 
ThreadPoolExecutor.DiscardOldestPolicy discardOldestPolicy = new ThreadPoolExecutor.DiscardOldestPolicy();
 
选择拒绝策略时,需要综合考虑以下因素:
- 系统对任务丢失的容忍度:如果不能丢失任务,应避免使用 
DiscardPolicy(丢弃策略)和DiscardOldestPolicy(丢弃最旧策略)。 - 对任务执行延迟的要求:如果不希望任务执行延迟增加,
CallerRunsPolicy(调用者运行策略)可能不太适合。 - 系统的稳定性和错误处理机制:
AbortPolicy(中止策略)能及时抛出异常,便于发现和处理任务提交失败的情况。 
例如,如果是一个关键的交易处理系统,不能丢失任务且对稳定性要求高,可能选择 AbortPolicy(中止策略)并在捕获异常后进行相应的处理和日志记录。而对于一个日志收集系统,对任务丢失有一定的容忍度,可以选择 DiscardPolicy(丢弃策略)以减少系统负担。
