.class 용 Java 동기화 블록
-
20-09-2019 - |
문제
이 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)
클래스 인스턴스를 모니터로 사용합니다. 클래스 인스턴스가 하나만 있으므로 (런타임에서 클래스 메타 데이터를 나타내는 객체) 하나의 스레드 가이 블록에있을 수 있습니다.
와 함께 synchronized(this)
블록은 인스턴스에 의해 보호됩니다. 모든 경우에만 하나의 스레드 만 블록에 들어갈 수 있습니다.
synchronized(X.class)
블록에 정확히 하나가 있는지 확인하는 데 사용됩니다. synchronized(this)
인스턴스 당 정확히 하나의 스레드가 있는지 확인합니다. 이로 인해 블록 스레드-안전한 부분이 구현에 따라 다릅니다. 인스턴스의 상태 만 돌연변이되는 경우 synchronized(this)
충분합니다.
다른 팁
다른 답변에 추가하려면 :
static void myMethod() {
synchronized(MyClass.class) {
//code
}
}
동일합니다
static synchronized void myMethod() {
//code
}
그리고
void myMethod() {
synchronized(this) {
//code
}
}
동일합니다
synchronized void myMethod() {
//code
}
아니요, 첫 번째는 클래스 정의에 대한 잠금을 얻을 것입니다. MyClass
, 그것의 모든 인스턴스는 아닙니다. 그러나 인스턴스에 사용되는 경우 단일 클래스 정의를 공유하므로 다른 모든 인스턴스를 효과적으로 차단합니다.
두 번째는 현재 인스턴스에만 잠금을받습니다.
이것이 당신의 객체 스레드를 안전하게 만드는지 여부에 관해서는 훨씬 더 복잡한 질문입니다. 코드를 볼 필요가 있습니다!
제휴하지 않습니다 StackOverflow