Sobes.tech
Middle

Mire szolgál a Future osztály Java-ban?

sobes.tech MI

Válasz az MI-től

A Future osztály egy aszinkron művelet eredményét képviseli. Lehetővé teszi az érték megszerzését a számítás után, ellenőrizni, hogy a művelet befejeződött-e, várni a befejezésére vagy megszakítani azt. Ez kulcsfontosságú az olyan nem blokkoló műveletekhez több szálas alkalmazásokban.

Főbb módszerek:

  • get(): Várja a művelet befejezését és visszaadja az eredményt. Blokkoló hívás.
  • get(long timeout, TimeUnit unit): Időkorláttal várja a művelet befejezését. TimeoutException-t dobhat.
  • isDone(): true-t ad vissza, ha a művelet befejeződött (sikeresen, hibával vagy törölve).
  • isCancelled(): true-t ad vissza, ha a műveletet törölték.
  • cancel(boolean mayInterruptIfRunning): Megpróbálja megszakítani a feladatot.

Használati példa:

import java.util.concurrent.*;

// Aszinkron feladat példa
class MyCallable implements Callable<String> {
    @Override
    public String call() throws Exception {
        Thread.sleep(1000); // Munka szimuláció
        return "Számítás eredménye";
    }
}

public class FutureExample {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newSingleThreadExecutor();

        // Aszinkron feladat indítása
        Future<String> future = executor.submit(new MyCallable());

        System.out.println("Feladat elindult. Várok...");

        // Állapot ellenőrzése nem blokkoló módon
        while (!future.isDone()) {
            System.out.println("A feladat még fut...");
            Thread.sleep(100);
        }

        // Eredmény lekérése (blokkoló hívás)
        String result = future.get();
        System.out.println("Eredmény: " + result);

        // Executor leállítása
        executor.shutdown();
    }
}