logo

„Java“ skambinama prieš ateitį

Java multithreading leidžia užduotis vykdyti vienu metu, pagerinant našumą ir reagavimą. Tradiciškai kūrėjai naudojo Runnable sąsają užduotims apibrėžti, tačiau ji turi du pagrindinius apribojimus: ji negali grąžinti rezultato ir negali išmesti patikrintų išimčių. Norėdami įveikti šias problemas, „Java 5“ pristatė skambinamojo ir ateities sąsajas.

Skambinimo sąsaja

The Iškviečiama sąsaja reiškia užduotį, kuri pateikia rezultatą ir gali padaryti išimtį. Jis panašus į Runnable, bet lankstesnis, nes gali grąžinti reikšmę ir išmesti pažymėtas išimtis.

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();  } } 

Išvestis
Result: 15 

Paaiškinimas: Iškviečiama užduotis pateikiama vykdytojui. Jis apskaičiuoja skaičių nuo 1 iki 5 sumą ir grąžina rezultatą. Rezultatas gaunamas naudojant future.get(), kai užduotis baigta.



Ateities sąsaja

The Ateities sąsaja reiškia asinchroninio skaičiavimo rezultatą. Kai „ExecutorService“ pateikiate iškviečiamą arba vykdomą užduotį, ji grąžina būsimą objektą.

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();  }  } } 

Išvestis
Result: 30 

Paaiškinimas: TheCallableužduočių skaičiavimai10 + 2 and ExecutorService.submit()metodas grąžina aFutureobjektas. Naudojantfuture.get()gausime rezultatą, kai skaičiavimas bus baigtas.

Galima skambinti prieš ateitį

FunkcijaGalima skambintiAteitis
Tikslas Reiškia užduotį, kuri grąžina rezultatąReiškia asinchroninės užduoties rezultatą
Grąžinimo tipas Grąžina rezultatą, kai jis vykdomasSaugo skambinamojo grąžintą rezultatą
Apibrėžiama java.util.concurrent paketąjava.util.concurrent paketą
Vykdymas Pateikta „ExecutorService“.Grąžino ExecutorService.submit()
Metodai Yra vienas metodo iškvietimas ()Yra tokie metodai kaip get() isDone() cancel()
Išimčių tvarkymas Gali mesti pažymėtas išimtisTvarko rezultatus ir išimtis po vykdymo
Naudojimas Apibrėžia, ką vykdytiValdo monitorius ir nuskaito užduoties rezultatą
Sukurti viktoriną