Middle
Kam naudojama klasė Future Java?
sobes.tech AI
Atsakymas iš AI
Future klasė atstovauja asinchroninės operacijos rezultatą. Ji leidžia gauti reikšmę po jos apskaičiavimo, patikrinti, ar operacija baigta, laukti jos pabaigos arba ją atšaukti. Tai svarbus elementas daugiagijinių programų neblokuojančioms operacijoms.
Pagrindiniai metodai:
get(): Laukia operacijos pabaigos ir grąžina rezultatą. Blokuojantis iškvietimas.get(long timeout, TimeUnit unit): Laukia operacijos pabaigos su laiko apribojimu. Gali išmestiTimeoutException.isDone(): Grąžinatrue, jei operacija baigta (sėkmingai, su klaida ar atšaukta).isCancelled(): Grąžinatrue, jei operacija buvo atšaukta.cancel(boolean mayInterruptIfRunning): Pabandys atšaukti užduotį.
Naudojimo pavyzdys:
import java.util.concurrent.*;
// Asinchroninės užduoties pavyzdys
class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
Thread.sleep(1000); // Darbo imitacija
return "Skaičiavimo rezultatas";
}
}
public class FutureExample {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newSingleThreadExecutor();
// Pradedame asinchroninę užduotį
Future<String> future = executor.submit(new MyCallable());
System.out.println("Užduotis pradėta. Laukiame...");
// Patikriname būseną neblokuojančiu būdu
while (!future.isDone()) {
System.out.println("Užduotis vis dar vyksta...");
Thread.sleep(100);
}
// Gauname rezultatą (blokuojantis iškvietimas)
String result = future.get();
System.out.println("Gauta rezultatas: " + result);
// Uždaryti vykdytoją
executor.shutdown();
}
}
Future dažnai naudojamas kartu su ExecutorService valdyti gijų pool'ą ir vykdyti asinchronines užduotis. Jis suteikia patogų būdą sąveikauti su paralelinių skaičiavimų rezultatais.