.class용 Java 동기 블록
이 자바 코드는 무엇을 의미합니까?의 모든 오브젝트를 잠글 수 있습니까?MyClass
?
synchronized(MyClass.class) {
//is all objects of MyClass are thread-safe now ??
}
그리고 위의 코드가 이 코드와 어떻게 다른지:
synchronized(this) {
//is all objects of MyClass are thread-safe now ??
}
토막synchronized(X.class)
는 클래스 인스턴스를 모니터로 사용합니다.클래스 인스턴스(실행 시 클래스 메타데이터를 나타내는 오브젝트)는 1개뿐이기 때문에 이 블록에는 1개의 스레드를 포함할 수 있습니다.
와 함께synchronized(this)
블록은 인스턴스에 의해 보호됩니다.각 인스턴스에 대해 블록에 들어갈 수 있는 스레드는 1개뿐입니다.
synchronized(X.class)
는 블록에 스레드가 정확히1개 있는지 확인하기 위해 사용합니다. synchronized(this)
는 인스턴스당 정확히1개의 스레드가 존재함을 보증합니다.이로 인해 블록 내의 실제 코드가 스레드 세이프가 되는지는 구현에 따라 달라집니다.인스턴스 상태만 변환하는 경우synchronized(this)
충분합니다.
다른 답변에 추가하려면:
static void myMethod() {
synchronized(MyClass.class) {
//code
}
}
와 동등하다
static synchronized void myMethod() {
//code
}
그리고.
void myMethod() {
synchronized(this) {
//code
}
}
와 동등하다
synchronized void myMethod() {
//code
}
아니요, 첫 번째가 클래스 정의에 대한 잠금을 획득합니다.MyClass
모든 인스턴스는 아닙니다.그러나 인스턴스에서 사용할 경우 단일 클래스 정의를 공유하므로 다른 모든 인스턴스가 효과적으로 차단됩니다.
두 번째 인스턴스는 현재 인스턴스만 잠급니다.
이렇게 하면 오브젝트가 안전하게 스레드화되는지 여부는 매우 복잡한 질문입니다.코드를 확인해야 합니다.
네, (동기화된 모든 블록/기능에서) 그렇게 됩니다.
(사실 코틀린에서) 며칠 동안 이 질문에 대해 스스로 고민했습니다.드디어 좋은 설명을 찾아서 공유하겠습니다.
클래스 레벨 잠금을 사용하면 런타임에 클래스의 사용 가능한 모든 인스턴스에서 동기화된 블록에 여러 스레드가 들어가지 않습니다.즉, 런타임에 DemoClass 인스턴스가 100개 있는 경우 한 번에 하나의 인스턴스에서 demoMethod()만 실행할 수 있으며 다른 모든 인스턴스는 다른 스레드에 대해 잠깁니다.
클래스 레벨 잠금은 정적 데이터 스레드를 안전하게 하기 위해 항상 수행해야 합니다.static 키워드는 메서드의 데이터를 클래스레벨에 관련짓기 때문에 static 필드 또는 메서드에서 잠금을 사용하여 클래스레벨로 만듭니다.
게다가 왜 .class인지도 알 수 있습니다.그것은 단지 때문이다.class
는 다음과 같은 클래스의 스태틱 변수와 동일합니다.
private final static Object lock = new Object();
여기서 lock 변수명은 class, type은 Class< 입니다.T>
상세내용 : https://howtodoinjava.com/java/multi-threading/object-vs-class-level-locking/
언급URL : https://stackoverflow.com/questions/2056243/java-synchronized-block-for-class
'programing' 카테고리의 다른 글
localhost에서 Docker MySQL 컨테이너에 연결하시겠습니까? (0) | 2022.12.29 |
---|---|
범용 메서드를 사용하는 경우 및 와일드 카드를 사용하는 경우 (0) | 2022.12.29 |
문자열 "XML safe"는 어떻게 만드나요? (0) | 2022.12.29 |
문자열 목록을 어떻게 정렬합니까? (0) | 2022.12.29 |
JavaScript에서 지연, 약속 및 미래의 차이점은 무엇입니까? (0) | 2022.12.29 |