【问题标题】:Does marking a variable as volatile makes it thread safe? [duplicate]将变量标记为 volatile 是否使其线程安全? [复制]
【发布时间】:2019-04-01 03:39:25
【问题描述】:

在谷歌搜索和阅读 StackOverflow 帖子后,我不清楚将变量标记为 volatile 是否使其线程安全。

是吗?

【问题讨论】:

    标签: java thread-safety volatile


    【解决方案1】:

    一句话——不。

    将变量标记为volatile 解决了“安全发布”问题,其中一个线程对变量所做的更改对所有其他线程都是可见的(也有其他方法可以做到这一点)。当变量不是 volatile 时,没有这样的保证。

    安全发布只是多线程编程的挑战之一 - 还有其他挑战。

    【讨论】:

    • 为什么对易失性变量所做的更改对其他线程可见而对非易失性变量所做的更改不可见?
    • 作为一种优化,可以将变量值从主内存复制到正在执行线程的 CPU/内核上。这类似于从磁盘将值读入内存并在那里操作它,而不是不断地读写磁盘。当一个变量被标记为易失性时,每当一个线程读取这个变量时,它的当前值就会被刷新回主内存。
    猜你喜欢
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多