[Java] 스레드 상태제어 - wait/notify

Hyo Kyun Lee·2022년 2월 4일
0

Java

목록 보기
46/49

1. wait, notify 메소드

동기화된 block 내부에서 사용하는 메소드로, 현재 실행중인 스레드를 강제로 lock하여 다른 스레드를 강제로 실행하는 메소드이다.

  • wait을 통해 다른 스레드를 호출하고, 해당 스레드가 실행완료될 때까지 대기한다.
  • wait을 통해 호출한 다른 스레드는 반드시 notify 메소드를 작성해주어야 lock을 풀고 기존의 메소드를 지속하여 진행시킬 수 있다.

2. 구현 방법

아래 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)를 다시 실행하게 된다.

0개의 댓글