线程池有哪些拒绝策略?怎样选择?
先自己想一想,再看参考要点
参考要点
- AbortPolicy(默认)抛出 RejectedExecutionException,CallerRunsPolicy 由提交任务的线程自己执行,DiscardPolicy 直接丢弃,DiscardOldestPolicy 丢弃队列中最早的任务再提交
- 不能丢且提交方能处理失败时用 Abort,能接受变慢时用 CallerRuns,Netty 的 I/O 线程这类不能阻塞的线程除外
- 允许丢失的统计上报用 Discard,只关心最新数据时用 DiscardOldest
- 线程池关闭后再提交,CallerRuns 会直接丢弃任务,submit() 返回的 Future 永远不会完成