1 java multithreading volatile
在谷歌搜索了很多之后,我发现了 volatile 关键字的多个定义。
概念一:
一些网站说,它是线程安全的,因为线程作用于存储 volatile 关键字的主内存,并在不将其拉到线程堆栈空间的情况下对其进行修改。
概念2:
有人说,它不是线程安全的,因为它会导致线程竞争条件。由于,线程将 volatile 变量拉到堆栈空间,修改它并立即将其放回主内存。但是,在另一个线程之间可以对 volatile 变量采取行动并采取行动。因此,通过这种方式,某些值会丢失。
哪个概念是正确的?
volatile 本身既不是线程安全的,也不是非线程安全的。
volatile保证单个字段的原子性,因此它可用于单线程安全读取或单线程安全写入。
然而,如果你想执行一个由读和写组成的线程安全操作(作为一个整体来理解),这里volatile单独不能提供线程安全,因为volatile只保证单个操作(读或写)的原子性。
总结:
volatile就足够了(没有volatile,其他线程甚至可能永远不会看到写入的值)volatile不会发生对该值的操作),这还不够;相反,您可以使用:
| 归档时间: |
|
| 查看次数: |
2097 次 |
| 最近记录: |