2
동기화 된 메서드와 정적 동기화 된 메서드의 주된 차이점을 이해하려고합니다.동기화 및 정적 동기화
예를 들어 Employee
클래스를 고려하면 두 개의 인스턴스가 e1
, e2
인 클래스를 고려하십시오.
synchronized method1() {
//--- blah blah---
}
e1
오브젝트 레벨 잠금을 획득함으로써 method1()
를 실행
e2
는
e1
의해 hwld 하였다 해제 될 로크를 기다리는 것이다.
클래스 수준에서 잠금을 보유하는 e1
을 정적으로 동기화하는 경우 e2
은 해당 블록을 입력 할 수 없습니다.
static synchronized method1() {
//--- blah blah---
}
두 경우는 어떻게 다른가요? 정적 및 비 정적 동기화 된 메서드 액세스 간의 차이점을 보지 못했습니다.
첫 번째 예에서 e1과 e2가 모두 병렬로 실행될 수 있습니까? 동기화 된 개념과 모순되지 않습니까? –
@BalajiG 확실한가요? 예/모순입니까 : 아니요. 첫 번째 예제는'void method1() {synchronized (this) {...}} '와 같습니다. 그래서 만약 당신이'e1.method1(); e2.method1(); 그들은 각각'e1'과'e2'를 잠글 것입니다. 이들은 서로 다른 잠금 장치이므로 서로 배타적이지 않습니다. – assylias
두 번째 예제는'static void method1() {synchronized (MyClass.class) {...}}'와 동일합니다. - 모든 인스턴스 ('Myclass.class')와 모든 호출 상호 배타적입니다. – assylias