Robert的博客

Robert的博客 -

谈谈Java Volatile的设计

java volatile为什么要这么设计?最近在知乎上看见一个有意思的问题: java volatile为什么要这么设计?如图所示,这种指令重排规则背后设计的是出于什么原因考虑?我想知道why? 而不是What/How 这个问题看似简单,但是后面其实隐藏着计算机架构的演变: CPU的多核心时代说到这儿,就要开始聊一下多线程/多处理器的发展史了。初期计算机性能的提升,主要靠的是主频的提升,后来主频提升遇到了困难,然后就开始了多核处理器的时代。 这里面有一个问题,一个程序可不是天然就能同时跑在多个CPU核心上的,如何让程序员利用多核心处理器提升效率,是一个难题。 这个问题乍一看很简单,我们已经有了线程模型了,直接套用到多核架构上不就可以了么? 但是不行,在原来的单核心架构中,我们的内存模型是 顺序一致性(Sequential consistency): 每个线程内部的指令都是按照程序规定的顺序(program order)执行的(单个线程的视角) 线程执行的交错顺序可以是任意的,但是所有线程所看见的整个程序的总体执行顺序都是一样的(整个程序的视角)

Java中的volatile关键字解决多线程/多处理器环境下的可见性和指令重排问题。它保证了跨线程的内存一致性,通过禁止指令重排来保证程序正确性。

Java volatile 可见性 多线程 指令重排

相关推荐 去reddit讨论

热榜 Top10

Dify.AI
Dify.AI
LigaAI
LigaAI
观测云
观测云
eolink
eolink

推荐或自荐