2013-07-27 5 views
0

난 그냥 자바 동기화 시작하고 작은 질문이 있습니다.동기화 된 메서드 ans 동기화 된 블록 Java에서

public synchronized void method() { 
    // ... do staff ... 
} 

가 같음 :

이 방법 나는 자바에 대해이 좋은 confs을 보았다

public void method() { 
    synchronize(this) { 
     // ... do staff ... 
    } 
} 

PS 최근

video 1 (이것은 내 질문에 온다에서) , video 2. 상대적인 비디오가 있습니까 (Java 및 Android 프로그래밍에 관심이 있습니다).

+0

에 http : // 유래.com/questions/574240/synchronized-block-vs-synchronized-method –

+1

일부 컨퍼런스에 참석해야하지만 컨퍼런스 홀이 아닙니다. –

+0

(1) 예. (2) 기존의 문서만으로는 이것을 확립하는 데 필요한 비디오가 필요하지 않습니다. (3) 당신이 비디오를위한 컴퓨터 프로그래밍을 배우려고한다고 생각한다면, 또 다른 생각이 생길 것입니다. – EJP

답변

0

예. 또한이 : 그냥 유튜브에 "자바 동기화"를 검색, 비디오에 관한

public static void method() { 
    synchronized (EnclosingClass.class) { 
    } 
} 

:

public static synchronized void method() { 
} 

은 동일합니다.

0
public void method() { 
    synchronize(this) { 
     // ... do staff ... 
    } 
} 

public synchronized void method() { 
    // ... do staff ... 
} 
0

네,이 의미 상 동일합니다. 동기화 된 메소드는 메소드가 속하는 인스턴스에 대해 암시 적으로 동기화됩니다.

0

방법 :

public synchronized void method() { // blocks "this" from here.... 
    ... 
    ... 
    ... 
} // to here 

블록 :

public void method() { 
    synchronized(this) { // blocks "this" from here .... 
     .... 
     .... 
     .... 
    } /// to here... 
} 

블록이 방법에 비해 장점을 가지고 않습니다 유연성의 모든 대부분의. 유일한 차이점은 동기화 된 블록이 동기화 대상을 선택할 수 있다는 것입니다. synchronized 메소드는 'this'(또는 동기화 된 클래스 메소드에 해당하는 Class 인스턴스) 만 사용할 수 있습니다.

동기화 된 블록은 모든 개체의 잠금 (종종 회원 변수)과 경쟁 할 수 있기 때문에보다 융통성이 있습니다. 도 있기 때문에 블록 전후에 동시에 코드가 실행될 수 있지만 여전히 메소드 내에있을 수 있습니다. 물론 동시 코드를 별도의 비동기 메소드로 리팩토링하여 동기화 된 메소드를 쉽게 사용할 수 있습니다. 코드를 더 이해하기 쉬운 것으로 사용하십시오.

Is there an advantage to use a Synchronized Method instead of a Synchronized Block?

+1

콘텐츠를 복사하는 동안 소스를 언급하십시오! – NINCOMPOOP

0

코드 outside synchronized blockmultiple threds에 의해 동시에 액세스 할 수 있습니다.

public void method(int b) { 
    a = b // not synchronized stuff 
    synchronize(this) { 
     // synchronized stuff 
    } 
} 

은 항상 동기화됩니다

public synchronized void method() { 
    // synchronized stuff 
}