synchronized와 static synchronized의 차이점

발생일: 2008.09.03

문제:
메서드를 동기화 하려고 하는데,
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.getClass()) { ... } } 과 동일합니다.


저작자 표시 비영리 변경 금지
신고