Sobes.tech
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šmesti TimeoutException.
  • isDone(): Grąžina true, jei operacija baigta (sėkmingai, su klaida ar atšaukta).
  • isCancelled(): Grąžina true, 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.