Метод 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