Sobes.tech
Junior

Kādiem līdzekļiem Java valodā var izveidot pavedienus?

sobes.tech AI

Atbilde no AI

Java straumes var izveidot vairākos veidos:

  1. Mantojot no klases Thread: Tiek izveidota jauna klase, kas manto no java.lang.Thread, un pārdefinēta metode run().

    // Izveidojam klasi, kas manto no Thread
    class MyThread extends Thread {
        // Pārdefinējam metodi run
        @Override
        public void run() {
            // Kods, kas tiek izpildīts jaunajā straumē
            System.out.println("Straume " + Thread.currentThread().getName() + " ir palaista.");
        }
    }
    

    Straumes palaišana:

    // Izveidojam straumes instanci
    MyThread thread = new MyThread();
    // Sākam straumes izpildi
    thread.start();
    
  2. Interfeisa Runnable īstenošana: Tiek izveidota klase, kas īsteno interfeisu java.lang.Runnable, un tiek sniegta run() metodes realizācija. Tad tiek izveidots Thread objekts, kuram tiek nodots Runnable objekts.

    // Izveidojam klasi, kas īsteno Runnable interfeisu
    class MyRunnable implements Runnable {
        // Realizējam metodi run
        @Override
        public void run() {
            // Kods, kas tiek izpildīts jaunajā straumē
            System.out.println("Straume " + Thread.currentThread().getName() + " ir palaista.");
        }
    }
    

    Straumes palaišana:

    // Izveidojam Runnable instanci
    MyRunnable runnable = new MyRunnable();
    // Izveidojam Thread objektu, nododot tajā Runnable
    Thread thread = new Thread(runnable);
    // Sākam straumes izpildi
    thread.start();
    

    Šis veids ir priekšroka, jo tas ļauj klasei manto arī no citiem klases veidiem.

  3. Interfeisa Callable īstenošana un ExecutorService izmantošana: Interfeiss java.util.concurrent.Callable, līdzīgi Runnable, pārstāv uzdevumu, kas var tikt izpildīts citā straumē, bet atšķirībā no Runnable, metode call() var atgriezt rezultātu un izsaukt izņēmumus. Callable izpildei parasti tiek izmantoti straumes baseini no java.util.concurrent.ExecutorService.

    import java.util.concurrent.*;
    
    // Izveidojam klasi, kas īsteno Callable interfeisu
    class MyCallable implements Callable<String> {
        // Realizējam metodi call, kas var atgriezt rezultātu
        @Override
        public String call() throws Exception {
            // Kods, kas tiek izpildīts jaunajā straumē
            System.out.println("Straume " + Thread.currentThread().getName() + " ir palaista.");
            // Atgriežam rezultātu
            return "Uzdevums veiksmīgi pabeigts!";
        }
    }
    

    Palaišana un rezultāta saņemšana:

    import java.util.concurrent.*;
    
    // Izveidojam straumes baseinu
    ExecutorService executor = Executors.newFixedThreadPool(1);
    // Izveidojam Callable instanci
    MyCallable callable = new MyCallable();
    // Nosūtām uzdevumu izpildei un saņemam Future, lai sekotu līdzi rezultātam
    Future<String> future = executor.submit(callable);
    
    try {
        // Saņemam uzdevuma rezultātu
        String result = future.get();
        System.out.println("Rezultāts: " + result);
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    } finally {
        // Noteikti pārtraucam `ExecutorService` darbību
        executor.shutdown();
    }