쓰레드에서 동기화할때 Synchronized Block대신에 메소드에 Synchronized할때 더 좋은 점이 있을까요?


쓰레드에서 Synchronized Block보다 Synchronized 메소드가 더 좋은 예좀 보여주세요.

  • 2016년 01월 18일에 작성됨

조회수 188


1 답변


좋아요
0
싫어요
채택취소하기

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 ) { 
             ... 코드
            }
            ... 코드 
            ... 코드 
            ... 코드
            ... 코드
}

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close