logo

Izsaucams pret nākotni Java

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.

Java
import 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.

Java
import 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

FunkcijaSazvanāmsNākotne
Mērķis Apzīmē uzdevumu, kas atgriež rezultātuApzīmē asinhrona uzdevuma rezultātu
Atgriešanas veids Atgriež rezultātu, kad tas tiek izpildītsSaglabā izsaucamā rezultāta atgriezto rezultātu
Definēts In java.util.concurrent pakotnejava.util.concurrent pakotne
Izpilde Iesniegts ExecutorServiceAtgriezis 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ņēmumusApstrādā rezultātus un izņēmumus pēc izpildes
Lietošana Definē, ko izpildītKontrolē monitorus un izgūst uzdevuma rezultātu
Izveidojiet viktorīnu