1 답변
-
Synchronized메소드가 블록보다 나은 특별한 장점은 없습니다. 굳이 하나를 뽑자면 this라는 오브젝트 레퍼런스를 포함시킬 필요가 없다는건데 전 이게 장점은 아니죠...
메소드:
public synchronized void method() { // 블록이었으면 this를 넣어야 함 ... ... ... }
블록 :
public void method() { synchronized( this ) { // this를 넣음 .... .... .... } }
Block이 메소드보다 나은데요. Synchronized 블락이 메소드보다 많은면에서 유연합니다. 왜냐면 Synchronized 메소드는 메소드 전체의 락을 걸지만 블락은 다른객체를 사용하여 특정 부분에 락을 걸수 있기 때문입니다.
//객체 전체를 잠금 ... private synchronized void someInputRelatedWork() { ... } private synchronized void someOutputRelatedWork() { ... }
Vs.
// 특정 부분만 잠금 Object inputLock = new Object(); Object outputLock = new Object(); private void someInputRelatedWork() { synchronize(inputLock) { ... } } private void someOutputRelatedWork() { synchronize(outputLock) { ... } }
또 Synchronized block을 사용하게 되면 밑의 코드처럼 메소드 내에서 필요한 부분만 락을 걸수있습니다.
private void method() { ... 코드 ... 코드 ... 코드 synchronized( lock ) { ... 코드 } ... 코드 ... 코드 ... 코드 ... 코드 }
댓글 입력