동기화된 block 내부에서 사용하는 메소드로, 현재 실행중인 스레드를 강제로 lock하여 다른 스레드를 강제로 실행하는 메소드이다.
아래 sub thread가 있다고 가정해보자.
public class ThreadA extends Thread{
public void run(){
Synchronized(this){
System.out.println("ThreadA Running");
}
}
notify(); //wait을 통해 호출되었을 경우 notify를 통해 다시 lock 해제
}
이 sub thread는 아래의 main thread를 통해 실행이 된다.
public class threadMain{
public void main(String[] args){
ThreadA th = new ThreadA;
th.start();
Synchronized(th){
System.out.println("main thread Running");
try{
th.wait(); //main thread 실행 중 강제로 sub thread 호출 및 실행대기
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}
위 main thread를 실행하면서 기본적으로 Synchronized blcok을 통해 실행하기 때문에, main thread가 실행종료되기 전까지는 sub thread들은 실행할 수 없다.
하지만 Synchronized block 내부에서 sub thread가 wait() 메소드를 통해호출된다면, 호출한 sub thread를 실행한다.
그 후 notify 메소드를 통해 sub thread의 실행종료 및 현재 lock(실행대기) 상태에 있던 스레드(main thread)를 다시 실행하게 된다.