Java multithreading ļauj uzdevumiem darboties vienlaikus, uzlabojot veiktspēju un atsaucību. Tradicionāli izstrādātāji izmantoja izpildāmo saskarni, lai definētu uzdevumus, taču tai ir divi galvenie ierobežojumi: tā nevar atgriezt rezultātu un nevar izmest pārbaudītus izņēmumus. Lai tos pārvarētu, Java versijā Java 5 ieviesa izsaucamās un nākotnes saskarnes.
pamēģini noķert java
Izsaucams interfeiss
The Izsaucams interfeiss apzīmē uzdevumu, kas atgriež rezultātu un var radīt izņēmumu. Tas ir līdzīgs Runnable, bet elastīgāks, jo tas var atgriezt vērtību un izmest pārbaudītus izņēmumus.
Javaimport java.util.concurrent.*; public class CallableExample { public static void main(String[] args) throws Exception { ExecutorService executor = Executors.newSingleThreadExecutor(); Callable<Integer> task = () -> { int sum = 0; for (int i = 1; i <= 5; i++) sum += i; return sum; // returns result }; Future<Integer> future = executor.submit(task); System.out.println('Result: ' + future.get()); executor.shutdown(); } }
Izvade
Result: 15
Paskaidrojums: Izsaucams uzdevums tiek iesniegts izpildītājam. Tas aprēķina skaitļu summu no 1 līdz 5 un atgriež rezultātu. Rezultāts tiek izgūts, izmantojot future.get() pēc uzdevuma pabeigšanas.
Nākotnes saskarne
The Nākotnes saskarne ir asinhrona aprēķina rezultāts. Iesniedzot izsaucamu vai izpildāmu uzdevumu pakalpojumam ExecutorService, tas atgriež nākotnes objektu.
Javaimport java.util.concurrent.*; public class CallableFutureExample { public static void main(String[] args) { ExecutorService executor = Executors.newSingleThreadExecutor(); Future<Integer> future = executor.submit(() -> 10 + 20); try { Integer result = future.get(); // waits but returns instantly System.out.println('Result: ' + result); } catch (Exception e) { e.printStackTrace(); } finally { executor.shutdown(); } } }
Izvade
Result: 30
Paskaidrojums: TheCallableuzdevumu aprēķini10 + 2 and ExecutorService.submit()metode atgriež aFutureobjektu. Izmantojotfuture.get()mēs iegūstam rezultātu, kad aprēķins ir pabeigts.
Izsaucams pret nākotni
| Funkcija | Sazvanāms | Nākotne |
|---|---|---|
| Mērķis | Apzīmē uzdevumu, kas atgriež rezultātu | Apzīmē asinhrona uzdevuma rezultātu |
| Atgriešanas veids | Atgriež rezultātu, kad tas tiek izpildīts | Saglabā izsaucamā rezultāta atgriezto rezultātu |
| Definēts In | java.util.concurrent pakotne | java.util.concurrent pakotne |
| Izpilde | Iesniegts ExecutorService | Atgriezis ExecutorService.submit() |
| Metodes | Ir viena metodes izsaukums () | Ir tādas metodes kā get() isDone() cancel() |
| Izņēmumu apstrāde | Var mest pārbaudītus izņēmumus | Apstrādā rezultātus un izņēmumus pēc izpildes |
| Lietošana | Definē, ko izpildīt | Kontrolē monitorus un izgūst uzdevuma rezultātu |