用Java执行两个独立任务的正确方法



我有两个独立的任务要执行。我首先需要任务1的结果,然后是任务2。

在线程数量和性能(如果有的话(方面,以下两种方法中哪一种更好,为什么?这两种方法的性能会有什么不同吗?

方法1:

1. Execute Task1 & Task2 asynchronously by submitting them to ExecutorService
2. Get the results by calling future1.get() followed future2.get()

方法2:

1. Execute task2 asynchronously by submitting it to ExecutorService.
2. Execute Task1 on main thread
3. Get the result of task2 by calling future2.get()

从人类的角度来看,第一个更好:

  • 任务1和任务2是等效任务
  • 两者都作为次要任务执行
  • 显式定义要等待的线程的顺序

从jvm的角度来看,第二个更好:

  • 只有一个外线程添加到主线程(而不是2个(
  • 你只等第二个结果

但是,如果生成的代码不太可读,那么通常过度优化代码不是一个好主意。我的建议是:

如果不需要,不要优化代码。

我认为方法1更可取。您启动了这两个任务,然后告诉编译器在这两项任务完成之前您没有其他事情可做。完成这两项任务后,您就可以继续了。您将如何运行任务的任何决策/优化留给JVM,JVM最适合做出这些决策。

我怀疑,一旦代码被JVM编译和优化,两种方法在线程、处理时间等方面几乎没有区别——要做的"工作"都是一样的。

最新更新