加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java:volatile足以使类线程安全吗?

发布时间:2020-12-15 05:20:04 所属栏目:Java 来源:网络整理
导读:我对 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 implement
我对 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它说

However,there are actions you can specify that are atomic:

  • Reads and writes are atomic for reference variables […]

Atomic actions cannot be interleaved,so they can be used without fear of thread interference.

我只是想确保我理解正确.

提前致谢 :)

解决方法

引用的读取和写入在Java中始终是原子的,因此没有危险,例如,在某个半更新状态中看到引用.如果你的意思是“线程安全”,那么操作是线程安全的,有或没有关键字.

但volatile不是关于原子性的,它会影响线程是否可以在本地缓存写入. volatile会强制写入写回主内存并对其他线程可见.如果你的意思是线程安全,那么是的,你需要这个关键字.

volatile本身不会影响foo上的方法调用是否排除其他线程.如果你的意思是你想要使用synchronized,并在不同的地方.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读