좋아, 스레드 안전 구현이있는 Java Math 클래스가 있다고 가정 해 보겠습니다. 스레드 A는 이제 SetValue (1)을 실행하고 Math 클래스를 잠급니다. 스레드 B가 GetValue()로 동시에 액세스하려고하면 어떻게됩니까? 잠금 해제 또는 메서드 요청이 경고 또는 예외없이 직접 종료 될 때까지 기다릴 것입니까?첫 번째 스레드가 클래스를 잠글 때 두 번째 스레드에 어떤 일이 일어나는가
public class Math {
private static int value = 0;
public synchronized static void setValue(int value) {
Math.value = value;
}
public synchronized static int getValue() {
return value;
}
}
첫째, 정적 메서드에서 "this"를 사용할 수 없습니다. – Juvanis
죄송합니다. 저는 순수한 글쓰기로 간단한 예를 만들었습니다. 나는 클래스가 잠겨있을 때 다음 스레드가 어떻게 동작 할 것인지를 확인하고자한다. – lannyboy
여기서 주목해야 할 몇 가지 사항은 다음과 같습니다. 1) 'int'에 할당/읽기는 모든 Java 구현에서 원자 연산이므로 'synchronized'는 이와 관련하여 도움이되지 않습니다. 2) 클래스가 동기화되어 있어도 경쟁 조건을 결코 막지 않습니다. –