2011-08-25 7 views
1

아래에서 예외가 syncMethod2()에서 발생하면 어떻게 잠금 객체를 잠금 해제 할 수 있습니까?잠금을 해제하기 전에 예외가 발생할 때 ReentrantLock 객체의 잠금을 해제하는 방법

lock.lock(); 
try { 
    syncMethod2(); // throw new NullPointerException(); 
} finally { 
    lock.unlock(); 
} 

그 패턴도 the ReentrantLock JavaDoc에 설명되어 있습니다 : finally -

public class ReEntrantLock { 
ReentrantLock lock = new ReentrantLock(); 

void syncMethod1() { 
    lock.lock(); 
    syncMethod2(); // throw new NullPointerException(); 
    lock.unlock(); 
} 

} 
+3

덧붙여서 : 다루는 클래스와 비슷한 이름 (또는 더 나쁜 것은 동일한 이름)이 혼란스러워서 예기치 않은 결과를 가져올 수 있으므로 테스트 클래스에 대해 다른 이름을 선택하는 것이 좋습니다. 이름에 "Test"를 추가하면 일반적으로 더 안전합니다. –

답변

2

당신은 try를 사용합니다.

6
public class ReEntrantLock { 
    ReentrantLock lock = new ReentrantLock(); 

    void syncMethod1() { 
     lock.lock(); 
     try { 
      syncMethod2(); 
     } finally { 
      lock.unlock(); 
     } 
    } 

} 

그것은 documentation 바로 거기 ...

+1

+1은 RTFM * 링크 *입니다. – Raedwald

관련 문제