4.1) OCJP/관련 이론 및 문법
관련 이론 및 문법 - synchronized
kkikkodev
2015. 7. 8. 01:13
자바에서 어느 구역을 동기화하고 싶을 때는 (동시에 한 쓰레드만 구역을 처리하고 싶을 때는) synchronized 키워드를 사용하면 됩니다.
첫 번째로는 공유할 객체를 접근하는 메소드의 좌측에 synchronized 키워드를 붙이는 경우입니다. 이 경우에는, 메소드 전체를 동시에 하나의 쓰레드만 접근이 가능하고, 메소드가 사용중일 때는, 다른 쓰레드는 메소드가 종료될 때까지 기다려야만 합니다. 만약, static 메소드를 synchronized 하게 되면, 해당 클래스의 모든 instance 에 대해 동기화를 하게 됩니다. 이는, static 멤버 변수의 동기화를 할 때 주로 사용됩니다.
두 번째로는,
synchronized(인스턴스 변수 혹은 클래스 타입){
...
}
와 같이, synchronized 블럭을 사용하는 것입니다. 이는, 특정 영역만 동기화시키는 것으로, 메소드 동기화보다는 적은 영역을 동기화 할 수 있는 특징이 있습니다. 인스턴스 변수를 넘기면, 인스턴스 변수의 lock 을 사용하게 되고, 클래스 타입을 넘기면, 클래스 전체의 lock 을 사용하게 됩니다.