출처 : http://interwater.tistory.com/13
Java 하며서 이론적으로 자주 마주 치는 놈이 이것인데....
이건 간단히 말하면 db 락의 개념으로 보면 된다.
synchronized 이게 붙어 있는 매쏘드는 그 매쏘드의 작업이 끝나기 전에 다른 놈이 사용을 못하게 하는 것이지..
엇 자 그런데 만약에 synchronized 가 붙은 method 가 있는 클래스를 new 를 통해서 생성해서 각각 쓰면 이게 동기화가 될까?
----------------------------------
ex)
class A{
Java 하며서 이론적으로 자주 마주 치는 놈이 이것인데....
이건 간단히 말하면 db 락의 개념으로 보면 된다.
synchronized 이게 붙어 있는 매쏘드는 그 매쏘드의 작업이 끝나기 전에 다른 놈이 사용을 못하게 하는 것이지..
엇 자 그런데 만약에 synchronized 가 붙은 method 가 있는 클래스를 new 를 통해서 생성해서 각각 쓰면 이게 동기화가 될까?
----------------------------------
ex)
class A{
synchronized test(){
}
}
}
class B{
class B{
new A().test();
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()){ ... } } 과 똑같다.
----------------------------------
결론은 아니다 이다.
즉, 위에 이놈들은 각각 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()){ ... } } 과 똑같다.
'개발 개발 > 자바' 카테고리의 다른 글
[Thread] 자바 Thread의 interrupt 이해하기 (0) | 2011.09.23 |
---|---|
[Thread] 자바 쓰레드의 resume, suspend, stop 구현 (0) | 2011.09.23 |
java에서 타 프로그램 실행후 바로 종료 할려면.. (0) | 2011.06.29 |
Java 메모리와 관련하여 (0) | 2011.06.24 |
[JAVA] 나쁜 코드 사례 (0) | 2011.04.14 |