코드가 예상치 못한 방식으로 손상되었습니다.
private static boolean foo;
public static final void bar() {
Boolean var0 = Boolean.valueOf(foo);
synchronized(var0) {
foo = !foo;
}
}
그래서 당신은 기본적으로 Boolean
클래스 내부의 TRUE
또는 FALSE
싱글 중 하나 내 JRE에있는의 valueOf
함수가 반환 객체 무엇에 잠금있어 : 여기에 자바 디 컴파일이 생성하는 바이트 코드의 단순화 된 버전입니다 (이 또한 단순화) :
public class Boolean {
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
public static Boolean valueOf(boolean var0) {
return var0 ? TRUE : FALSE;
}
}
특정 런타임 독립적 인 코드를위한 가장 좋은 방법은에 동기화 할 Any
의 별도의 인스턴스를 만들 아마.
의견의 근거는 무엇입니까? 수락 된 대답은 의견이 아니며 자물쇠와 같은 물건을 갖는 것이 왜 위험 할 수 있는지 설명합니다. – rozina