gpt4 book ai didi

java - 当使用 synchronized 和 volatile 关键字时,哪些变量与主存同步

转载 作者:行者123 更新时间:2023-11-30 09:15:48 24 4
gpt4 key购买 nike

如果一个变量声明为volatile,那么对于每次读取访问,本地缓存都会从主内存更新,而对于每次写入访问,本地缓存都会刷新到主内存。但是哪些变量是同步的?我相信,如果我将 v 声明为易变的,那么它并不是唯一同步的变量。但是线程缓存中的一些其他(或所有)变量也被同步。线程堆栈由多个帧组成,每个帧对应于每个调用的方法。它会继续并同步每一帧吗?同步块(synchronized block)是否同步对象中的每个变量?

最佳答案

您需要澄清什么是“缓存刷新”。访问 volatile 变量确实在变量本身之外有内存效应。事实上,volatile 变量与同步块(synchronized block)具有相同的内存语义。线程在写入 volatile 变量之前所做的一切都被刷新到“主内存”,这样任何其他随后读取该 volatile 变量的线程都会看到效果。也就是说,volatile 变量的保证是限定范围的,因此唯一的保证与对相同 volatile 变量的访问有关。即,无法保证在写入 volatile 变量后,该线程所做的一切对所有其他线程 都是可见的。

关于java - 当使用 synchronized 和 volatile 关键字时,哪些变量与主存同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19718070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com