Dokładniej: jeśli rozpocznę obliczenia asynchroniczne, wywołując metodę submit(Callable<T> task)
na ExecutorService
(sam zbudowany przy pomocy Executors.newCachedThreadPool()
), mogę poczekać na zakończenie obliczeń i pobranie wynik przez wywołanie Future.get()
.Java Callable: Co stanie się z wątkiem, zanim get() zostanie wywołany
Moje pytanie brzmi: jeśli obliczenia są już zakończone, co się stanie, dopóki nie zadzwonię pod numer get()
? Czy wątek jest blokowany, dopóki nie uzyskałem wyniku? Czy wynik jest przechowywany i wątek jest przypisany do innego zadania? Coś zupełnie innego?
Dzięki z góry za pan odpowie
Dzięki za odpowiedź! Dla pewności, że rozumiem cię poprawnie (przepraszam, angielski nie jest moim językiem ojczystym): Jeśli uruchomię kilka wątków dla obliczeń i otrzymam wynik dopiero dużo później, gdy wszystkie zostaną zakończone, to nie jest problem, ponieważ ukończone zadania nie używają żadnych zasoby, prawda? –
@ shadow_heart Wynik obliczenia (= zadanie) jest przechowywany w obiekcie 'Future', więc możesz' get() 'go, kiedy tylko chcesz. 'get()' blokuje tylko wywołujący wątek w przypadku, gdy obliczenia jeszcze się nie zakończyły. – isnot2bad