스레드를 볼 수있는 값을 설정해야하는 변수가 있습니다. 나는 어떤 쓰레드가 글쓰기를하고 있는지 전혀 모른다.스레드가 표시되는 비 휘발성 멀티 스레드 쓰기
변수는 한 번만 설정되므로 volatile
으로 설정하면 변수 값이 CPU 캐시에서 읽히지 않게됩니다 (또는 내 이해가됩니다). 한번 쓰고 많은 것을 읽으십시오.
final을 사용하기 위해이 변수를 생성자로 가져올 수 없습니다.
내 거친 흐름은 다음과 같습니다
public void setX(int value) {
Object o = new Object();
synchronized(o) {
this.x = value;
}
}
그리고이 원칙-전에 일어나는의 값이 메모리에 기록되기 때문에 :
thread 1: set value x
thread 1: fire notification to say x is ready.
thread 2: read x.
나의 이해는 다음 작업을 수행 할 수 있다는 것입니다 . 그 맞습니까?
다시 시도 하시겠습니까? 'setX()'가 호출 될 때마다'o'가 다른 객체를 참조하기 때문에 – djb
'synchronized (o)'는 예제에서 beforeHothing을 사용하지 않습니다. 동기화는 두 개 이상의 스레드가 _same_ 개체에서 동기화 할 때만 의미합니다. –
@Cheetah 스레드 2가'x'가 스레드 1에서 설정 될 때까지 기다려야한다는 것을 이해합니다. 그러나 스레드 1이 스레드 2가'x'를 읽고 싶어 할 때까지 기다려야하는지 알고 싶습니다 ... –