Sobes.tech
Junior

Milyen eszközökkel lehet szálakat létrehozni a Java nyelvben?

sobes.tech MI

Válasz az MI-től

A Java-ban többféleképpen hozhatunk létre szálat:

  1. Öröklődés a Thread osztályból: Létrehozunk egy új osztályt, amely öröklődik a java.lang.Thread-ből, és felülírjuk a run() metódust.

    // Osztály létrehozása, amely öröklődik a Thread-ből
    class MyThread extends Thread {
        // A run metódus felülírása
        @Override
        public void run() {
            // Kód, amely fut az új szálon
            System.out.println("Szál " + Thread.currentThread().getName() + " elindult.");
        }
    }
    

    Szál indítása:

    // Szál példányának létrehozása
    MyThread thread = new MyThread();
    // Szál indítása
    thread.start();
    
  2. A Runnable interfész megvalósítása: Létrehozunk egy osztályt, amely megvalósítja a java.lang.Runnable interfészt, és megadja a run() metódus implementációját. Ezután létrehozunk egy Thread objektumot, amelynek átadjuk a Runnable példányát.

    // Osztály létrehozása, amely megvalósítja a Runnable-t
    class MyRunnable implements Runnable {
        // A run metódus implementálása
        @Override
        public void run() {
            // Kód, amely fut az új szálon
            System.out.println("Szál " + Thread.currentThread().getName() + " elindult.");
        }
    }
    

    Szál indítása:

    // Runnable példány létrehozása
    MyRunnable runnable = new MyRunnable();
    // Thread objektum létrehozása, átadva a Runnable-t
    Thread thread = new Thread(runnable);
    // Szál indítása
    thread.start();
    

    Ez a módszer előnyösebb, mivel a osztály más osztályoktól is örökölhet.

  3. A Callable interfész megvalósítása és az ExecutorService használata: A java.util.concurrent.Callable interfész, ellentétben a Runnable-vel, egy feladatot képvisel, amely más szálon is végrehajtható, de a call() metódus eredményt adhat vissza és kivételeket dobhat. A Callable végrehajtásához általában a java.util.concurrent.ExecutorService-ből származó szálmedencéket használják.

    import java.util.concurrent.*;
    
    // Osztály létrehozása, amely megvalósítja a Callable-t
    class MyCallable implements Callable<String> {
        // A call metódus implementálása, amely eredményt adhat
        @Override
        public String call() throws Exception {
            // Kód, amely fut az új szálon
            System.out.println("Szál " + Thread.currentThread().getName() + " elindult.");
            // Eredmény visszaadása
            return "Feladat sikeresen végrehajtva!";
        }
    }
    

    Indítás és eredmény lekérése:

    import java.util.concurrent.*;
    
    // Szálmedence létrehozása
    ExecutorService executor = Executors.newFixedThreadPool(1);
    // Callable példány létrehozása
    MyCallable callable = new MyCallable();
    // Feladat küldése végrehajtásra és Future objektum beszerzése az eredmény nyomon követéséhez
    Future<String> future = executor.submit(callable);
    
    try {
        // Eredmény lekérése
        String result = future.get();
        System.out.println("Eredmény: " + result);
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    } finally {
        // A `ExecutorService` bezárása
        executor.shutdown();
    }