Java:volatile足以使类线程安全吗?
我对
Java中的volatile语句有疑问.请看这个构造的例子:
class Master { // Foo is a class with thread-safe methods public volatile Foo foo; } class Worker1 implements Runnable { protected Master master void run() { ... }; } class Worker2 implements Runnable { protected Master master void run() { ... }; } 我们有2个工作线程,它们持有对同时运行的类Master对象的引用.在他们的工作中,他们都必须访问master.foo的方法.在某些时候,master的Foo对象将被其中一个工作线程更改.现在我的问题是:使用volatile会使整个构造线程安全吗?我问这个是因为在Java tutorial from Oracle它说
我只是想确保我理解正确. 提前致谢 :) 解决方法
引用的读取和写入在Java中始终是原子的,因此没有危险,例如,在某个半更新状态中看到引用.如果你的意思是“线程安全”,那么操作是线程安全的,有或没有关键字.
但volatile不是关于原子性的,它会影响线程是否可以在本地缓存写入. volatile会强制写入写回主内存并对其他线程可见.如果你的意思是线程安全,那么是的,你需要这个关键字. volatile本身不会影响foo上的方法调用是否排除其他线程.如果你的意思是你想要使用synchronized,并在不同的地方. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |