lock()와 unlock( )를 통한 동기화블록

CODEDRAGON Development/Java

반응형


 

lock() unlock( ) 통한 동기화블록

·       synchronized키워드를 대체할 있는 방법입니다.

·       Java Ver 5.0 이후부터 제공되는 동기화 방식입니다.

·       lock 메소드와 unlock 메소드의 호출을 통해서 동기화 블록을 구성합니다.

·       ReentrantLock 인스턴스 이용한 동기화 기법입니다.

·       임계영역 내에서 예외가 발생하거나 return문으로 빠져 나가게 되면 lock 풀리지 않을 있으므로 unlock() try~catch()문으로 감싸는 것이 일반적입니다. try블럭내에서 어떤 일이 발생해도 finally블럭에 있는 unlock() 수행되기 때문에 lock 풀리지 않는 일은 발생하지 않습니다.

·        

 

private final ReentrantLock syncObj = new ReentrantLock( );

void myMethod(int num){

syncObj.lock( );

    //임계영역

 

syncObj.unlock( );

}

 

void myMethod(int num){

 

syncObj.lock( );     //다른 스레드가 진입못하게 잠금

try{

 

}finally{

syncObj.unlock( );     //다른 쓰레드가 진입하도록 잠금 해제

}

 

}//안정적인 구현 모델