在java多线程程序中使用AtomicInteger比其他同步方法更慢,效率更低吗?

时间:2012-12-08 00:21:47

标签: java multithreading

我正在进行两个多线程java程序的实验。我有一个未同步的,另一个使用AtomicIntegerAtomicInteger要慢得多。我认为这可能是因为方法AtomicInteger使用compareAndset()。我是对的吗?

2 个答案:

答案 0 :(得分:1)

当然,同步的安全性会带来一些性能成本。例如,请参阅Cost of synchronization

答案 1 :(得分:1)

AtomicInteger类及其兄弟节点将与您在纯Java中编写的任何等效功能一样快,并且通常更快,因为它们可能能够使用平台上可用的本机指令。

每当编写并发程序时,请使用java.util.concurrency包。与使用synchronizedvolatile撰写的任何内容相比,更有效。

如果两个线程都使用合适的内存屏障,则只保证一个线程的操作对另一个线程可见。例如,编写和阅读volatile变量,或输入synchronized块。跳过内存障碍会更快,但由于你的程序被破坏,你的效率为零。