Метод join в Java

Метод join останавливает поток в котором этот метод был вызван пока не закончит выполнение поток к которому этот метод был вызван.

Более понятно на примере:

import java.io.*; class ThreadJoining extends Thread { @Override public void run(){ for (int i = 0; i < 2; i++){ try{ Thread.sleep(500); System.out.println("Current Thread: " + Thread.currentThread().getName()); } catch(Exception e){ System.out.println("Exception has been caught"+e); } System.out.println(i); } } } class JoinExample { public static void main (String[] args){ ThreadJoining t1 = new ThreadJoining(); ThreadJoining t2 = new ThreadJoining(); ThreadJoining t3 = new ThreadJoining(); t1.start(); try{ System.out.println("Current Thread: " + Thread.currentThread().getName()); //ниже join вызван в потоке мейн к потоку t1 t1.join();//приостанавливает текущий поток //(в данном случае поток в котором выполняется мейн) //пока не выполниться t1 } catch(Exception e){ System.out.println("Exception has been caught" + e); } t2.start(); try{ System.out.println("Current Thread: " + Thread.currentThread().getName()); //Опять таки останавливаем мейн //пока не выполниться t2. t2.join(); } catch(Exception e){ System.out.println("Exception has been caught" + e); } t3.start(); try{ System.out.println("Current Thread: " + Thread.currentThread().getName()); //Опять таки останавливаем мейн //пока не выполниться t3. t3.join(); } catch(Exception e){ System.out.println("Exception has been caught" + e); } } }

Вывод:

В консоли видно, что мейн останавливался, давая по очереди полностью выполниться потокам.

Синхронизация в Java с помощью Synchronized

Изучите synchronized в Java: как организовать поочередный доступ потоков к общему ресурсу. Пример кода с пояснением работы синхронизации.
Time to read: 13

Synchronized static в Java

Разница между synchronized и synchronized static в Java. Как блокировка на уровне класса влияет на все объекты. Практические примеры и выводы.
Time to read: 15

Синхронизация с помощью Wait/Notify

Узнайте, как использовать wait/notify в Java для приостановки и возобновления потоков. Примеры кода и объяснение работы механизма межпоточной синхронизации.
Time to read: 9