我有一个类似下面的代码,其中一个对象在两个线程(主线程和监视器线程)之间共享。我是否必须全局声明 MyObject 并volatile
确保将其推送到内存?否则,if
如果 MyObject 仅由线程本地访问并且未声明为 volatile,则该语句可以打印“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 上自己编写的。将其视为伪代码和真实代码的混合。