Рубрики
Без рубрики

Пример соединения потоков Java

Соединение потоков Java. Пример соединения потоков Java. Метод соединения потоков используется для приостановки выполнения текущего потока, если указанный поток не мертв.

Автор оригинала: Pankaj Kumar.

Метод Java Thread join может использоваться для приостановки выполнения текущего потока до тех пор, пока указанный поток не будет остановлен. Существует три перегруженные функции объединения.

Соединение потоков Java

public final void join() : Этот метод соединения потоков java помещает текущий поток в режим ожидания до тех пор, пока поток, в котором он вызывается, не будет мертв. Если поток прерывается, он вызывает исключение InterruptedException.

публичное окончательное синхронизированное пустое соединение(длинные миллисекунды) : Этот метод соединения потоков java используется для ожидания, когда поток, в котором он вызывается, будет мертв, или для ожидания в течение указанных миллисекунд. Поскольку выполнение потока зависит от реализации ОС, это не гарантирует, что текущий поток будет ждать только заданное время.

публичное окончательное синхронизированное соединение с пустотой(длинные миллисекунды, int наносекунды) : Этот метод соединения потоков java используется для ожидания завершения потока в течение заданных миллисекунд плюс наносекунды.

Вот простой пример, показывающий использование методов Thread join . Цель программы состоит в том, чтобы убедиться, что main завершается последним потоком, а третий поток запускается только тогда, когда первый из них мертв.

package com.journaldev.threads;

public class ThreadJoinExample {

    public static void main(String[] args) {
        Thread t1 = new Thread(new MyRunnable(), "t1");
        Thread t2 = new Thread(new MyRunnable(), "t2");
        Thread t3 = new Thread(new MyRunnable(), "t3");
        
        t1.start();
        
        //start second thread after waiting for 2 seconds or if it's dead
        try {
            t1.join(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        t2.start();
        
        //start third thread only when first thread is dead
        try {
            t1.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        t3.start();
        
        //let all threads finish execution before finishing main thread
        try {
            t1.join();
            t2.join();
            t3.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        System.out.println("All threads are dead, exiting main thread");
    }

}

class MyRunnable implements Runnable{

    @Override
    public void run() {
        System.out.println("Thread started:::"+Thread.currentThread().getName());
        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Thread ended:::"+Thread.currentThread().getName());
    }
    
}

Результатом работы вышеуказанной программы является:

Thread started:::t1
Thread started:::t2
Thread ended:::t1
Thread started:::t3
Thread ended:::t2
Thread ended:::t3
All threads are dead, exiting main thread

Это все для быстрого обобщения примера соединения потоков java.