我的java应用程序有一个加载任务,需要两个可以并行化的服务器调用.所以我启动了一个Thread t1(执行task1)和一个Thread t2(for task2).我希望在其他任务(1和2)结束时执行特定任务task3.当然我不知道task1和task2中哪一个会先完成...
哪个是最简单(也是最安全)的代码编码方式?
谢谢您的帮助
你有几个选择:
如果task3在一个单独的线程上并且task1和task2线程对其任务是独占的(没有线程池)并在任务完成时完成,则可以使用{T1.join(); T2.join();}等待两个线程.优点:简单.缺点:情况很少那么简单.
如果task3位于单独的线程上,则可以使用在所有线程之间共享的java.util.concurrent.CountDownLatch.任务3将等待锁存器,而task1和task2将减少它.优点:相当容易,不注意环境.缺点:要求T3在真正需要之前创建.
如果task3只应在task1和task2完成之后创建(在task1和task2完成之后没有单独的线程),你必须构建一些更复杂的东西.我建议您创建自己的ExecutorService,该条件是未来的条件,只在条件发生变化时执行未来,或者创建一个管理服务来检查条件并根据这些条件提交给定的期货.记住,这是我的头脑,可能有更简单的解决方案.优点:资源友好.缺点:复杂.