Java中的Volatile vs Atomic,为什么我们需要原子工具包

时间:2016-08-10 17:50:42

标签: java multithreading

Volatile消除了可见性和订购问题。虽然atomic toolkit提供了操作的原子性。 易失性使用happens-before关系,Atomic使用比较和交换。

为什么需要像原子工具包那样引入新的抽象层,而不是增强volatile关键字本身?是否有任何特定情况可以通过原子工具包解决?

1 个答案:

答案 0 :(得分:2)

实际上,如果您仔细查看Atomic* implemetations,那么您会发现所有这些字段都包含CAS字段值。

IMHO atomics已经是volatile机制的扩展,它提供了进行原子CAS操作的便捷方法。

隐藏var info = new ProcessStartInfo(@"C:\Program Files\Git\git-cmd.exe"); info.RedirectStandardInput = true; info.UseShellExecute = false; var gitProcess = new Process { StartInfo = info }; gitProcess.Start(); using (StreamWriter sw = gitProcess.StandardInput) { // commands here } gitProcess.WaitForExit(); 实施也有好处。例如,热点jvm大量使用内在函数来实现挤压性能。