에 잠금 자바 클래스에서 내 지식으로 당자바 스레드 정적 메서드
- 비 정적 동기화 방법 : 특정 객체에
- 정적 동기화 방법을 습득 잠금 : 클래스를 취득 잠금
정적 메서드를 클래스 이름 또는 개체 이름으로 호출 할 수 있으므로 약간 혼란 스럽습니다.
4 가지 방법이 모두 내 클래스를 동기화한다고 가정하십시오. 2 가지 방법은 정적이고 2 가지 방법은 정적이 아닙니다. 나는 내 수업 "으로 obj1"1 개 객체를 생성하고이 스레드 Thread1하고 Thread2뿐만 아니라이있는 경우
질문 1 : 내가 OBJ1를 사용하여 정적 동기화 방법에 액세스하려고 할 경우 (또는 클래스 이름). "obj1"에 대한 잠금이 없다는 것을 의미합니까? 단지 2 개의 정적 메서드가 잠길 것입니다 (클래스 수준 잠금)? 다른 스레드가 비 정적 메서드에 액세스 할 수 있지만 "obj1"을 동시에 사용하는 정적 메서드는 아닌 것을 의미합니까?
질문 2 : 내가 Thread1에서 OBJ1를 사용하여 비 정적 동기화 방법에 액세스하려고합니다합니다. Thread2에 2 개의 메소드 만 잠긴 것을 의미합니까? 내 클래스의 모든 메소드는 정적이며 동기화하는 경우 :뿐만 아니라 동시에
질문 3 Thread2 2 정적 메서드에 액세스 할 수 있습니다, 또는 우리는 클래스 명 (MyClass에)를 사용하여 정적 메서드를 액세스 할 수 있습니다. 이것은 객체 레벨 잠금이없고 모든 스레드에 대해 단 하나의 클래스 레벨 잠금 만 있다는 것을 의미합니다. ?
사전에 클래스 레벨 잠금에 대해감사를 조금 설명해주십시오. 당신은 그것은 잠금이 Class 객체에 있다는 사실을 변경하지 않습니다
someObject.staticMethod()
와 정적 메소드를 호출해도
특정 [잠금 개체] (http://docs.oracle.com/javase/tutorial/essential/concurrency/newlocks.html)를 사용하면 클래스 또는 인스턴스를 사용하여 잠금 기능을 사용하는 것이 좋습니다. –
@HovercraftFullOfEels 우수한 사용자 이름! :-) –