Future
действительно очень ограниченная абстракция, в более реалистичных c случаях вы должны использовать CompletableFuture
вместо этого. Future
довольно старый класс (начиная с java 1,5, я полагаю), поэтому понимание отрасли постепенно развивается в области параллельного программирования,
Тем не менее, он все еще может быть полезен сам по себе.
Что если вместо того, чтобы порождать одно будущее и немедленно вызывать get
, мы бы хотели создать много задач и сохранить результат в некотором списке:
List<Future<Integer>> futures = new ArrayList<>(10);
for(int i = 0 ; i< 10; i++) {
futures.add(calculate(<some_integer>));
}
// at this point all futures are running concurrently
for(int i = 0 ; i < 10; i++) {
futures.get(i).get(); // will either return immediately or we'll block the main thread but the point is that all the calculations will run concurrently
}