Sobes.tech
Junior

რა საშუალებებით შეიძლება Java ენის საშუალებით ნაკადების შექმნა?

sobes.tech AI

პასუხი AI-სგან

Сиз Java-да бірнеше жолмен ағынды құра аласыз:

  1. Thread класына мұрагерлік ету арқылы: Жаңа класс құрылады, ол java.lang.Thread-ден мұрагерлік етеді, және run() әдісін қайта анықтайды.

    // `Thread`-ден мұрагерлік ететін класс құру
    class MyThread extends Thread {
        // `run()` әдісін қайта анықтау
        @Override
        public void run() {
            // Жаңа ағында орындалатын код
            System.out.println("Ағын " + Thread.currentThread().getName() + " іске қосылды.");
        }
    }
    

    Ағынды іске қосу:

    // Ағынның мысалын құру
    MyThread thread = new MyThread();
    // Ағынды іске қосу
    thread.start();
    
  2. Runnable интерфейсін жүзеге асыру арқылы: Жаңа класс құрылады, ол java.lang.Runnable интерфейсін жүзеге асырады, және run() әдісін жүзеге асырады. Содан кейін Thread объектісі құрылады, оған Runnable объекті беріледі.

    // `Runnable` жүзеге асыратын класс құру
    class MyRunnable implements Runnable {
        // `run()` әдісін жүзеге асыру
        @Override
        public void run() {
            // Жаңа ағында орындалатын код
            System.out.println("Ағын " + Thread.currentThread().getName() + " іске қосылды.");
        }
    }
    

    Ағынды іске қосу:

    // `Runnable` мысалын құру
    MyRunnable runnable = new MyRunnable();
    // `Thread` объектісін құру, оған `Runnable` беріледі
    Thread thread = new Thread(runnable);
    // Ағынды іске қосу
    thread.start();
    

    Бұл әдіс артықшылығы, себебі ол кластың басқа кластардан мұрагерлік етуіне мүмкіндік береді.

  3. Callable интерфейсін жүзеге асыру және ExecutorService қолдану: java.util.concurrent.Callable интерфейсі, Runnable-ден айырмашылығы, орындалатын тапсырманы білдіреді, ол нәтиже қайтаруы және қателіктерді тастау мүмкіндігі бар. Callable-ды орындау үшін әдетте java.util.concurrent.ExecutorService-тің пулдары пайдаланылады.

    import java.util.concurrent.*;
    
    // `Callable` жүзеге асыратын класс құру
    class MyCallable implements Callable<String> {
        // `call()` әдісін жүзеге асыру, ол нәтиже қайтаруы мүмкін
        @Override
        public String call() throws Exception {
            // Жаңа ағында орындалатын код
            System.out.println("Ағын " + Thread.currentThread().getName() + " іске қосылды.");
            // Нәтижені қайтару
            return "Тапсырма сәтті аяқталды!";
        }
    }
    

    Іске қосу және нәтиже алу:

    import java.util.concurrent.*;
    
    // Ағындар пулын құру
    ExecutorService executor = Executors.newFixedThreadPool(1);
    // `Callable` мысалын құру
    MyCallable callable = new MyCallable();
    // Тапсырманы орындауға жіберу және `Future` алу
    Future<String> future = executor.submit(callable);
    
    try {
        // Нәтижені алу
        String result = future.get();
        System.out.println("Нәтиже: " + result);
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    } finally {
        // `ExecutorService`-ті жабу
        executor.shutdown();
    }