StandardThreadExecutor和ThreadPoolExecutor区别
时间: 2023-10-17 17:27:21 浏览: 91
StandardThreadExecutor和ThreadPoolExecutor都是Java中线程池的实现类。它们的主要区别在于:
1. 继承关系:StandardThreadExecutor实现了Executor接口,而ThreadPoolExecutor则是其子类,扩展了ExecutorService接口。
2. 创建方式:StandardThreadExecutor只能通过构造函数创建,而ThreadPoolExecutor可以通过多种构造函数来创建。
3. 线程池大小控制:StandardThreadExecutor的线程池大小是固定的,由构造函数中的参数指定;而ThreadPoolExecutor可以根据需要动态调整线程池的大小,通过设置核心线程数、最大线程数和等待队列等参数来实现。
4. 队列类型:StandardThreadExecutor使用的是LinkedBlockingQueue作为等待队列,该队列没有容量限制;而ThreadPoolExecutor的等待队列可以根据需求选择不同的类型,如SynchronousQueue、LinkedBlockingQueue或ArrayBlockingQueue等。
5. 线程拒绝策略:当线程池已满无法继续接受新任务时,StandardThreadExecutor会直接抛出RejectedExecutionException异常;而ThreadPoolExecutor可以根据设置的拒绝策略来处理超出处理能力的任务,常见的拒绝策略有AbortPolicy、CallerRunsPolicy、DiscardOldestPolicy和DiscardPolicy。
总的来说,StandardThreadExecutor适用于固定大小的线程池场景,简单易用;而ThreadPoolExecutor更为灵活,适用于动态调整线程池大小和处理不同类型任务的场景。
阅读全文