线程池AbortPolicy表示
时间: 2023-05-27 10:04:51 浏览: 56
当任务添加到线程池中被拒绝时,会抛出异常,终止执行。具体来说,当线程池中的任务队列已满且池中线程数达到最大时,如果再有任务提交,就会拒绝并抛出RejectedExecutionException异常。这个AbortPolicy就是处理这种拒绝情况的策略。
相关问题
线程池设置常见的拒绝策略用表格表示从多维度
下面是常见的线程池拒绝策略以及它们在多个维度上的比较,使用表格进行表示:
| 拒绝策略 | 描述 | 返回值 | 异常处理 | 阻塞 | 使用场景 |
|------------------|--------------------------------------------------------------|----------------|------------|------------|--------------------------------------------------------------|
| AbortPolicy | 直接抛出RejectedExecutionException异常,阻止任务提交 | 无返回值 | 无法捕获 | 不阻塞 | 不允许任务丢失的场景,需要及时知道任务被拒绝的情况 |
| CallerRunsPolicy | 由提交任务的线程来执行任务,不会抛弃任务 | 无返回值 | 可以捕获 | 阻塞主线程 | 需要保证任务执行顺序或需要调用者自己执行任务的场景 |
| DiscardPolicy | 默默地丢弃无法处理的任务,不做任何处理 | 无返回值 | 不会捕获 | 不阻塞 | 对任务丢失不敏感的场景,对于无法处理的任务不做任何特殊处理 |
| DiscardOldestPolicy | 丢弃最早提交但未被执行的任务,然后尝试再次提交新任务 | 无返回值 | 不会捕获 | 不阻塞 | 对任务丢失不敏感的场景,更倾向于执行新提交的任务而非等待旧任务 |
| 自定义拒绝策略 | 用户可以根据具体需求自定义拒绝策略,实现RejectedExecutionHandler接口 | 无返回值 | 可以捕获 | 阻塞主线程 | 需要根据业务需求实现特定的拒绝策略的场景 |
请注意,这只是一个简单的比较表格,实际情况可能因具体应用和需求而有所不同。选择合适的拒绝策略取决于具体的应用场景和需求,需要权衡任务丢失、系统可用性、线程资源等因素。
new ThreadPoolExecutor.AbortPolicy()
`new ThreadPoolExecutor.AbortPolicy()` 是一个线程池的拒绝策略,它表示当线程池无法处理新的任务时,会抛出一个未检查的 `RejectedExecutionException` 异常。这个策略会直接拒绝任务并抛出异常,因此不会重试执行被拒绝的任务。这个策略是线程池的默认拒绝策略。