以上列出的是Java线程池中常见的拒绝策略,具体可以根据实际情况选择合适的拒绝策略,也可以自定义实现RejectedExecutionHandler接口来定义自己的拒绝策略。默认的拒绝策略是AbortPolicy,即直接抛出异常。
最简回答:线程池的拒绝策略有四种:AbortPolicy(默认方式,中止并抛出RejectedExecutionException异常)、CallerRunsPolicy(使用调用线程来执行被拒绝的任务)、DiscardPolicy(默默地丢弃被拒绝的任务)以及DiscardOldestPolicy(丢弃最早被添加到队列的任务,然后尝试重新提交新任务)。。如果希望快速失败并将异常传递给调用者,则选择AbortPolicy。如果希望尽可能保证任务的执行而不堆积在队列中,则选择CallerRunsPolicy。如果对任务的丢失情况不敏感,则选择DiscardPolicy。而如果希望尽可能保留最新的任务而不是旧的任务,则选择DiscardOldestPolicy。
- synchronized 和 lock 的区别
最简回答:synchronized和Lock的区别是:synchronized是Java关键字,是内置的同步机制,能修饰方法或代码块,锁的获取是隐式的,底层实现原理是基于JVM内置监视器锁;而Lock是一个接口,提供更灵活的同步机制,可以手动控制锁的获取和释放,底层实现可以是ReentrantLock等,性能在高竞争环境下通常较好。