Java synchronized 란?

Java synchronized 란?


Java 하며서 이론적으로 자주 마주 치는 놈이 이것인데….
이건 간단히 말하면 db 락의 개념으로 보면 된다.
synchronized 이게 붙어 있는 매쏘드는 그 매쏘드의 작업이 끝나기 전에 다른 놈이 사용을 못하게 하는 것이지..
엇 자 그런데 만약에 synchronized 가 붙은 method 가 있는 클래스를 new 를 통해서 생성해서 각각 쓰면 이게 동기화가 될까?

1
2
3
4
5
6
7
8
9
10
11
12
// ----------------------------------
// ex)
class A{
synchronized test(){
}
}
class B{
new A().test();
new A().test();
}

// ----------------------------------

결론은 아니다 이다.

즉, 위에 이놈들은 각각 object 가 틀린 놈이기 때문에 다른 놈으로 본다 이거지… 이걸 막기 위해서 최초 프로그램이 loading 될때 메모리에 적재 시키게 하는 static 를 넣어서 method 를 정의 하면 된다. 참고로

public synchronized void A() { … } 는
public void A() { synchronized(this){ … } } 과 똑같고,
public static synchronized void A() { … } 는
public static void A() { synchronized(this.getClass()){ … } } 과 똑같다.

Share