我正在学习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

09-28 12:38