2014-06-11 5 views
2

내가 자바 "휘발성"키워드에 대한 질문이 있습니다, 스레드는 "휘발성"키워드로이 클래스를 사용하는 가정 지금클래스 멤버 변수에 Java "volatile"이 필요합니까?

public class BooleanValClass { 

    private boolean bolVal = false; 

    public boolean getVal() { 
     return this.bolVal; 
    } 

    public void setVal(boolean val) { 
     bolVal = val; 
    } 
} 

:

이 가정을, 우리는 다음과 같은 클래스가

private volatile BooleanValClass myClass = new BooleanValClass(); 

내가 클래스 "BooleanValClass"의 멤버 필드 "bolVal"에 또한 "휘발성"키워드를 첨부하거나 객체 참조의 모든 회원들에게 "리디렉션"의 일종은 "휘발성"입니다 수행 "BooleanValClass"클래스?

덕분에, 톰

+1

'myClass'가 변경되지 않으면'volatile'보다는'final'이어야합니다. 'myClass'와'bolVal' 둘 다 변경 가능하다는 것이 나에게 들리지 않습니다. – Holger

+0

참고 사항 : Java에서 사용할 수있는 AtomicBoolean 클래스가 있습니다. –

답변

4

아무것도 리디렉션되지 않습니다. myClass은 휘발성이며 bolVal은 그렇지 않습니다. myClass에서 할당 및 읽기가 일시적으로 작동합니다. bolVal에 대한 지정/읽기는 수행하지 않습니다.

+0

올바르게 지적했다. 이렇게하면 myClass 참조에 대한 최신 변경 사항 (즉, 다른 인스턴스를 가리키는 경우) 만 표시됩니다. – Shail016