Sobes.tech
Middle

Na čo sa používa trieda Future v Jave?

sobes.tech AI

Odpoveď od AI

Trieda Future predstavuje výsledok asynchrónnej operácie. Umožňuje získať hodnotu po jej výpočte, skontrolovať, či operácia bola dokončená, počkať na jej dokončenie alebo ju zrušiť. Je kľúčovým prvkom pre neblokujúce operácie v viacvláknových aplikáciách.

Hlavné metódy:

  • get(): Čaká na dokončenie operácie a vráti výsledok. Blokujúci volanie.
  • get(long timeout, TimeUnit unit): Čaká s časovým limitom na dokončenie operácie. Môže vyvolať TimeoutException.
  • isDone(): Vráti true, ak bola operácia dokončená (úspešne, s chybou alebo zrušená).
  • isCancelled(): Vráti true, ak bola operácia zrušená.
  • cancel(boolean mayInterruptIfRunning): Pokúsi sa zrušiť úlohu.

Príklad použitia:

import java.util.concurrent.*;

// Príklad asynchrónnej úlohy
class MyCallable implements Callable<String> {
    @Override
    public String call() throws Exception {
        Thread.sleep(1000); // Simulácia práce
        return "Výsledok výpočtu";
    }
}

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

        // Spustenie asynchrónnej úlohy
        Future<String> future = executor.submit(new MyCallable());

        System.out.println("Úloha spustená. Čakám...");

        // Kontrola stavu neblokujúcim spôsobom
        while (!future.isDone()) {
            System.out.println("Úloha stále beží...");
            Thread.sleep(100);
        }

        // Získanie výsledku (blokujúci volanie)
        String result = future.get();
        System.out.println("Výsledok: " + result);

        // Ukončenie executor-u
        executor.shutdown();
    }
}