두 스레드 (주 스레드 및 모니터 스레드)간에 개체가 공유되는 코드는 아래와 같습니다. MyObject를 전역으로 선언하고 메모리에 푸시되도록 volatile
으로 설정해야합니까? 그렇지 않으면 if
문은 MyObject가 스레드에 의해서만 로컬로 액세스되고 휘발성으로 선언되지 않으면 "Not null"을 인쇄 할 수 있습니까?휘발성 키워드 : 두 스레드간에 동기화되는 변수입니까?
public static void main(String[] args) {
MyObject obj = MyObjectFactory.createObject();
new Monitor(obj).start();
Thread.sleep(500);
if(obj == null)
System.out.println("Null");
else
System.out.println("Not null");
}
public void doSomethingWithObject(MyObject obj) {
obj = null;
}
private class Monitor extends Thread {
public Monitor(MyObject obj) {
this.obj=obj;
}
public void run() {
doSomethingWithObject(obj);
}
}
참고 :이 코드 예제는 내가 Stackoverflow에서 작성한 이후로 컴파일되지 않을 수 있습니다. 의사 코드와 실제 코드가 혼합 된 것으로 간주하십시오.
컴파일하는 코드 예제로 시연하고 싶은 것을 말하기가 훨씬 쉬울 것입니다. – Affe
@Affe : 죄송합니다. 왜 내가 컴파일 할 수 없는지 설명하는 게시물에 메모를했습니다. :-) – Rox