java根据条件向ExecutorService动态提交任务
我目前正在使用带有固定线程池的ExecutorServices并提交3个任务
ExecutorService executorService = Executors.newFixedThreadPool(3);
Future<Object1> = executorService.submit(task1);
Future<Object2> = executorService.submit(task2);
Future<Object3> = executorService.submit(task3);
executorService.shutdown();
executorService.awaitTermination(10000, TimeUnit.MILLISECONDS)
现在它工作得很好,因为我总是需要执行所有这些服务,但是现在我想定制它。 例如,我可能只需要运行服务1、服务2、服务3或它们的任意组合或所有组合
如何自定义要提交执行的所有服务以及线程池大小
我不想做令人毛骨悚然的if
检查来检查服务1是否需要等
# 1 楼答案
这是否满足您的要求:
然后,根据应用程序逻辑,只需确保名为
List
的servicesToRun
包含要运行的服务# 2 楼答案
我认为您需要做的是抽象出对
ExecutorService
的访问,并传入您希望它动态处理的任务请注意,我在这里没有做出任何履约保证或承诺;这是一个概念,人们至少应该按照这个概念来思考
如果我确信每次都要拆除线程池,我可以动态地将线程池的大小设置为传入的任务的大小
如果您处理
InterruptedException
,您可以这样调用它: