Java에서 동기화 된 블록의 개념에 대해 머리를 감싸는 데 어려움을 겪고 있습니다. 동기화 된 방법을 충분히 이해했다고 생각합니다. 그래서 저는 동기화 된 방법으로 동기화 된 블록을 이해할 수있는 비유를 생각했습니다. 제가 제안한 동등성이 올바른지 알려주십시오. 또한, 지금까지는 비 정적 동기화 된 블록에 대해서만 언급했습니다. 그러나 정적 동기 블록에 대한 포인트도 환영합니다.Java에서 동기화 된 블록의 단순화
public void method()
{
//code snipppet A
synchronized(objRef)
{
//code snipppet B
}
//code snipppet C
}
는 OBJREF의 클래스에서
public void method() {
//code snippet A
objRef.sync_method();
//code snippet C
}
하는 것과 같습니다
public synchronized void sync_method() {
//code snippet B
}
이 비유는 블록이 동기화 방법은 마찬가지로 행동 동기화 로직을 기반으로합니다. 하나의 스레드가 모니터에서 잠금을 획득하면 다른 스레드가 해당 스레드의 실행을 방해하지 않는다는 것을 의미합니다. 스레드는 동기화 된 전체 메서드 실행을 마친 후에 만 제어권을 보류합니다.
생각 인쇄 할 수 있습니다. 명확하게하기 위해,'synchronized void method() {blabla(); }'는'void method() {synchronized (this) {blabla();에 대한 지름길이다. }}'. 둘 다 객체 'this'와 관련된 잠금을 얻은 다음 blabla()에서 코드를 실행 한 다음 잠금을 해제합니다. –
명확히하기 위해 메서드가 아닌 개체 만 잠급니다. 동기화 된 메서드가있을 때는 메서드가 아니라 개체를 잠급니다. –