ExecutorService executor = Executors.newFixedThreadPool(10);
Runnable firstWorker = new DataComparison(DataComparison.FIRST_THREAD_INSTANCE,args[0], args[1], args[2], runSkey, fic_mis_date,legal_entity, args[6],failover);
executor.execute(firstWorker);
Runnable secondWorker = new DataComparison(DataComparison.SECOND_THREAD_INSTANCE,args[0], args[1], args[2], runSkey, fic_mis_date,legal_entity, args[6],failover);
executor.execute(secondWorker);
Runnable thirdWorker = new DataComparison(DataComparison.THIRD_THREAD_INSTANCE,args[0], args[1], args[2], runSkey, fic_mis_date,legal_entity, args[6],failover);
executor.execute(thirdWorker);
这是我的代码,其中我想仅在第一次完成处理时才调用第二个和第三个线程。我在AwaitTermination
和sleep
之间感到困惑。请建议。
答案 0 :(得分:1)
使用Java 8 CompletableFuture,您可以编写
serverNameList
这将在第一个任务完成时启动第二个和第三个任务。
答案 1 :(得分:0)
如果我理解你的问题,使用Guava对期货的支持可能会非常有帮助。
我会参考此article by google来更多地了解ListenableFuture
。以下是基于您的代码的代码示例,但如果您计划使用Guava的Futures,我可能会以不同的方式构建我的代码:
ListeningExecutorService s = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10));
Runnable firstWorker = new DataComparison(1);
final Runnable secondWorker = new DataComparison(2);
final Runnable thirdWorker = new DataComparison(3);
ListenableFuture f = s.submit(firstWorker);
Futures.addCallback(f, new FutureCallback() {
@Override
public void onSuccess(Object o) {
secondWorker.run();
}
@Override
public void onFailure(Throwable throwable) {
}
});
Futures.addCallback(f, new FutureCallback() {
@Override
public void onSuccess(Object o) {
thirdWorker.run();
}
@Override
public void onFailure(Throwable throwable) {
}
});
这里发生的是首先我们提交第一个工作人员,然后向其添加2个回调(secondWorker
和thirdWorker
)。 onSuccess
方法将在firstWorker
成功完成后调用。如果它抛出异常,则会调用onFailure
。