Java单线程执行和cpu缓存

标签 java multithreading caching cpu

假设我的应用程序只有一个线程,并且运行该应用程序的平台有多个 CPU。有可能应用程序的单线程在某个时间点在 cpu A 上执行,读取属性 X 的值,修改其值,并且属性 X 的修改值不会提交到主内存,它只是驻留在 cpu 注册表中或缓存。然后,一段时间后,应用程序的同一线程可以在 cpu B 上继续其流程,读取属性 X 的值并从主内存中获取过时的值,因为更新的值驻留在 cpu A 注册表/缓存上。

所以到目前为止,我到处都看到这种可见性问题只发生在多线程应用程序中,但似乎如果我已经描述过,这也是可能的。

有什么想法吗?

最佳答案

Java 语言定义表示,线程中较早发生的任何事情与同一线程中较晚发生的任何事情之间存在“先发生”关系。这意味着 JVM 负责与操作系统一起工作,以确保线程中较早写入的任何数据对于同一线程中较晚的任何操作的可见性。在大多数操作系统上,我相信这将在操作系统级别进行处理,方法是在线程切换时保存寄存器状态并将缓存刷新到内存。无论如何,您在编写Java代码时不必担心它。

关于Java单线程执行和cpu缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43682114/

相关文章:

java - Android 亚行 : pull to memory

java - 单例中volatile的使用(Bill Pughs Solution)

android - Flutter Plugin : crash_dump. cpp:无法附加到线程 185:权限被拒绝

mysql - 将innodb数据库的一些表加载到mariadb的内存中

python - 如何缓存读取?

java - 在 Java 中播放单个随机音符

java - 使用udp无连接协议(protocol)在简单的java服务器中可以实现多线程吗?

java - 以键值对的形式传递 json 数组

java - 实例化一个类,然后在另一个线程中使用它

caching - 确认分类缓存已启用 SDL Tridion 2009 Content Delivery