FUTURE: Как получить результат, не блокируя основной поток?
Некая вводная БАЗА:
Когда речь заходит об асинхронных задачах, всегда вспоминаем про CompleatableFuture.
Задача от интервьюера: Как достать результат выполнения Future без блокировки основного потока?
Решение с подвохом: вместо полного блокирования мы можем реализовать активную деятельность основного потока. Заставим его ждать в while цикле пока Future.isDone не станет true - как только станет тогда и достанем результат.
Условие задачи выполнено, хоть и не самым тривиальным способом. По-моему, интересная задача, при решении которой можно даже чутка покреативить.
#techInterviewTask
Некая вводная БАЗА:
Когда речь заходит об асинхронных задачах, всегда вспоминаем про 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
🔥31❤6 3 1