如果您需要等待执行完成,则可以返回a
Future作为返回值,例如
@Asyncpublic Future<Void> executeBla() { System.out.println("Bla!"); return new AsyncResult<Void>(null);}这是人为的,因为没有返回实际值,但是它仍然允许调用代码等待所有执行完成:
public void executeBlaALotOfTimes() { long before = System.currentTimeMillis(); Collection<Future<Void>> futures = new ArrayList<Future<Void>>(); for (int i = 0; i<40000; i++) { futures.add(executeBla()); } for (Future<Void> future : futures) { future.get(); } long after = System.currentTimeMillis(); System.out.println("Time it took for a lot of bla to execute: " + (after - before) / 1000.0 + " seconds.");}在这里,第一个循环触发异步任务并将期货存储在列表中。然后秒循环遍历期货,等待每一个期货结束。



