티스토리 뷰
발생일: 2008.09.03
문제:
메서드를 동기화 하려고 하는데,
synchronized 와 static synchronized 의 차이점을 모르겠다.
해결책:
문제:
메서드를 동기화 하려고 하는데,
synchronized 와 static synchronized 의 차이점을 모르겠다.
해결책:
synchronized method는 synchronized(this) { } 블럭으로 쓰는 것과 동일합니다.
즉, 현재 instance에 대해서만 동기화가 일어난다는 것이지요.
이 경우 해당 instance에서는 동기화가 일어나지만,
2개 이상의 instance가 있다면 각각의 instance에 대해 동기화가 일어나므로
두 개의 instance가 각각의 method를 실행하는 것이 가능합니다.
반면 static synchronized method의 경우는 해당 클래스의 클래스 객체에 대해 동기화가 일어납니다.
따라서, static 한 member 변수를 동기화하려면,
static synchronized를 사용하여야 합니다.
또 하나.
public synchronized void methodA() { ... } 는
public void methodA() { synchronized(this) { ... } } 과 동일하며,
public static synchronized void methodA() { ... } 는
public static void methodA() { synchronized(TargetClass.class) { ... } } 과 동일합니다.
반응형
댓글
공지사항