자바에서 synchronized 키워드에 관해 질문드립니다.
글쓴이: vudghkzm / 작성시간: 월, 2005/09/05 - 5:40오후
class A { public synchronized void f1() { .... } public synchronized void f2() { .... } }
2개의 쓰레드가 하나의 공통된 A 클래스 인스턴스 a 에 접근할 수 있다고 가정합시다. 2개의 쓰레드중 하나가 a.f1() 을 실행중에 있습니다. 그럼 이 때 나머지 쓰레드에서 a.f2() 를 호출하면, a.f1() 의 실행이 끝나고 난 뒤에 a.f2() 가 실행되는게 보장되나요?? 아니면 그에 상관없이 a.f2() 가 실행되나요?
즉, synchronized 라는 키워드가 해당 메쏘드에 대해서 thread safe 를 보장한다는 것인지, 아니면 해당 객체에 대해서 thread safe 를 보장한다는 것인지... 가 궁금합니다.
Forums:
[code:1]synchronized public void metho
위 두 메소드는 사실상 동일합니다. 바이트코드는 다르게 생성되는 것으로 알고 있습니다만 어쨌거나 의미상 같습니다. 즉 말씀하신 상황에서 a.f2() 는 a.f1() 과 동시에 실행되지 않습니다
자바는 별로 많이 쓰지는 않지만 제가 알고 있는 부분만 말씀드리자면 sy
자바는 별로 많이 쓰지는 않지만 제가 알고 있는 부분만 말씀드리자면 syncronized 메소드는 오브젝트 클래스의 인스턴스의 원자성을 보호하는 개념입니다.
즉 거칠게 설명하자면 class c 의 인스턴스 a의 메소드 f1 이 syncronized로 선언되면 같은 클래스의 sync method들은 a.f1()이 끝마쳐 질때까지 a에 대한 접근을 보류합니다.
그러므로 syncronized 메쏘드는 복합 클래스에 남발하면 성능이 많이 떨어질 수 있습니다.
you must know the power of dark side.
댓글 달기