인스턴스 변수가 있고 setter 및 getters가 있다고 가정합니다.Java 다중 스레드 게터 및 설정자
코드 1 :
Class<T> {
volatile T value;
public synchronized void set(T v) {
if(value==null) {
value=v;
}
}
public T get() {
return value;
}
}
코드 2 :
Class<T> {
static volatile T value;
public synchronized void set(T v) {
if(value==null) {
value=v;
}
}
public T get() {
return value;
}
}
나는이 두 가지 질문
1) 정적 휘발성 상태 필드 만 휘발성 상태 필드를 갖는 차이점은 무엇입니까?
2) 방금 읽기/쓰기의 개념에 대해 알게되었고 (캐시 플러시로 인해) getter를 동기화 할 필요가 없다는 것을 이해했습니다. 그러나 세터를 동기화 할 필요가 있습니까?
첫 번째 질문에 대한 답변은 멀티 스레딩과 관련이 없습니다. 정적 변수는 정적 변수입니다. 변수가 휘발성인지 아닌지는 관련이 없습니다. – assylias
@assylias 아니요, 이것을 고려해보십시오 :'class X implements Runnable {private static Object o; public void run() {o = new Object(); }}'. 변수가 정적이거나 그렇지 않은 경우이 경우 중요합니다. –
@ Absurd-Mind 나는 static이 아무 쓸모가 없다고 말하지 않았다. 단지'static' 키워드의 의미는 비 휘발성 변수와 휘발성 변수가 동일하다고 만 말했다. – assylias