我正在学习Java多线程,并遇到了very good tutorial online。但是我不确定我是否理解作者解释线程安全对象,变量等的部分。引用他的话
public void someMethod(){
LocalObject localObject = new LocalObject();
localObject.callMethod();
method2(localObject);
}
public void method2(LocalObject localObject){
localObject.setValue("value");
}
我了解为什么LocalObject实例是线程安全的。但是我想看一个异常(exception)情况的例子(上面的代码中的最后一行)。如果有人可以编写适合最后一行内容的代码段,那将非常有帮助。谢谢!
最佳答案
public class SomeClass {
private LocalObject cachedLocalObject;
public void someMethod() {
LocalObject localObject = new LocalObject();
localObject.callMethod();
method2(localObject);
}
public void method2(LocalObject localObject) {
this.cachedLocalObject = localObject;
localObject.setValue("value");
}
public LocalObject getCachedLocalObject() { return cachedLocalObject; }
}
将对象缓存在
method2()
中,然后将其暴露在getCachedLocalObject()
中供外部使用的组合破坏了线程安全性:某些其他线程可以使用getCachedLocalObject()
获取和修改cachedLocalObject
。