synchronized 키워드와 ReentrantLock 클래스에 대해

출처 : http://mindwing.kr/103

synchronized 키워드 대신 java.util.concurrent.ReentrantLock 을 쓰면 다음의 잇점들이 생깁니다.

  • lock 을 얻으려는 스레드를 interrupt 시킬 수 있다.
  • lock 을 얻는데 대한 timeout 을 설정할 수 있다.
  • lock 에 2개 이상의 condition 을 설정해서 쓸 수 있다.
  • synchronized 키워드를 위해 JVM 이 사용하는 lock 기능은 하드웨어의 lock 메커니즘과 잘 매핑되지 않는 문제를 피할 수 있다.

둘 중의 무엇을 쓸 것인지는 다음 가이드를 따르면 됩니다.

  • java.util.concurrent 패키지에는 lock 기능을 제공하는 다른 클래스들이 많이 있다. 데이터 구조등의 사용 목적에 따라 이들 클래스를 쓰는 것이 synchronized 키워드나 ReentrantLock 클래스를 쓰는 것보다 낫다.
  • synchronized 키워드로 잘 동작하고 있는 코드거나 그런 코드를 잘 만들 수 있다면 synchronized 키워드를 쓰는 것이 코드 수도 적고, 에러가 발생할 가능성도 낮다.
  • 여러 condition 을 설정해서 써야 한다면 ReentrantLock 클래스를 쓴다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다