每次运行程序/应用程序时,何时创建多个执行程序服务是个好主意?你为什么要这样做,而不是在开始时启动executors.newcachedthreadpool()
并向其提交所有的callables。
答案 0 :(得分:5)
总而言之,我无法想到一个原因,对于一个足够大的项目,你只想在整个程序中使用一个线程池。
答案 1 :(得分:1)
添加执行程序服务的典型用例是,您希望服务使用不同的线程池策略,或者具有两种不同的池大小。您的应用程序可能包含一类您想要提交给大型固定大小池的可运行程序,以及另一种可能需要较小池的可运行程序。
请记住,ExecutorService有几个实现:
看看ThreadPoolExecutor的构造函数参数,根据您提交的任务类型,这些是您可能想要调整的所有内容:
ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)
请注意,您还可以传入队列,以便控制线程池使用的排队策略。