JAVA GYM RAT | Катя Кондратьева
2.35K subscribers
217 photos
36 videos
118 links
Фитоняшка вещает о бэкенд разработке и лайве
https://boosty.to/javagymrat
Download Telegram
FUTURE: Как получить результат, не блокируя основной поток?

Некая вводная БАЗА:

Когда речь заходит об асинхронных задачах, всегда вспоминаем про CompleatableFuture.

CompleatableFuture - имплементирует интерфейсы Future и CompletionStage, за счет чего мы можем выстраивать пайплайны обработки данных, а также можем параллельно, не блокируя основной поток, работать с результатами выполненной асинхронно задачи

Future такого функционала не предоставляет: получить результат команды можно только через блокирующий метод get()


Задача от интервьюера: Как достать результат выполнения Future без блокировки основного потока?

Решение с подвохом: вместо полного блокирования мы можем реализовать активную деятельность основного потока. Заставим его ждать в while цикле пока Future.isDone не станет true - как только станет тогда и достанем результат.

Future<Data> f = executor.submit(this::loadData);

while (!f.isDone()) {
Thread.sleep(1000);
}

Data d = f.get();


Условие задачи выполнено, хоть и не самым тривиальным способом. По-моему, интересная задача, при решении которой можно даже чутка покреативить.

Оценка: 6 из 10


#techInterviewTask
🔥31631