什么时候用ExecutorService,什么时候用ThreadPoolExecutor?

发布时间 2023-03-24 10:24:48作者: 英特耐雄纳尔定要实现
如果不需要对线程池参数应用任何自定义微调,并且希望使用预配置的线程池实例,则应该选择ExecutorService。ExecutorService提供了几种方法来创建不同类型的线程池,例如固定的、缓存的、单个的或调度的。
 

如果需要对线程池行为进行更多的控制和灵活性,并且希望自定义线程池的各种参数,例如核心池大小、最大池大小、保持活动时间、阻塞队列和被拒绝的执行,则应该选择ThreadPoolExecutor。

ExecutorService是接口,而TheradPoolExecutor是对这个接口的具体实现。接口只提供几个关键的方法,而实现类则允许为线程池对象输入自定义的参数。

ExecutorService一般用于父类引用(接口引用)指向子类对象,子类对象是由工具类Executors的newXXX方法生成出来的,后面的XXX就是各种不同类型的线程池。把生成的线程池对象用这个接口去指向就可以了。

ThereadPoolExecutor则是一个具体的类,所以需要new ThreadPoolExecutor(20,2000,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>())通过构造方法去新建一个线程池对象。这里的参数都是自定义的,就是上面介绍的那些参数:核心池大小、最大池大小、保持活动时间、阻塞队列和被拒绝的执行