본문 바로가기

개발 개발/자바

[Java] synchronized 란?

출처 : http://interwater.tistory.com/13

Java 하며서 이론적으로 자주 마주 치는 놈이 이것인데....
이건 간단히 말하면 db 락의 개념으로 보면 된다.
synchronized 이게 붙어 있는 매쏘드는 그 매쏘드의 작업이 끝나기 전에 다른 놈이 사용을 못하게 하는 것이지..

엇 자 그런데 만약에 synchronized 가 붙은 method 가 있는 클래스를 new 를 통해서 생성해서 각각 쓰면 이게 동기화가 될까?
----------------------------------
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()){ ... } } 과 똑같다.