我有两个独立的任务要执行。我首先需要任务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编译和优化,两种方法在线程、处理时间等方面几乎没有区别——要做的"工作"都是一样的。