在某些时候线程会竞争监视器,此时一个线程应该赢,Java是否使用内置在CPU中的原子CAS操作来实现这些监视器的获取,如果不是这样的话?
答案 0 :(得分:0)
我不这么认为,因为在concurrent
包中你可以找到内部使用CAS的Atomic*
类。
另一件事是它取决于你使用什么样的jvm。因此,就目前的形式而言,除了告诉你CAS被用于elswhere之外,你的问题并不是真正的问题。
答案 1 :(得分:0)
更大的担忧是,在Java中,任何CAS(或读/写易失性和同步/非同步)都伴随着其他线程的内存视图是最新的。当你编写一个volatile时,读取它的线程会看到通过编写线程所做的所有内存更改。这涉及将寄存器值转储到内存,刷新缓存,更新缓存以及将数据放回寄存器。但是这些成本与CAS并行,所以如果你有一个想通了,你也得到了另一个想法。
我认为,从程序员的角度来看,基本思想是使用volatile或atomic操作进行单次读写和多次同步 - 如果则没有其他令人信服的理由选择一个而不是另一个。