我正在进行两个多线程java程序的实验。我有一个未同步的,另一个使用AtomicInteger
。 AtomicInteger
要慢得多。我认为这可能是因为方法AtomicInteger
使用compareAndset()
。我是对的吗?
答案 0 :(得分:1)
当然,同步的安全性会带来一些性能成本。例如,请参阅Cost of synchronization。
答案 1 :(得分:1)
AtomicInteger
类及其兄弟节点将与您在纯Java中编写的任何等效功能一样快,并且通常更快,因为它们可能能够使用平台上可用的本机指令。
每当编写并发程序时,请使用java.util.concurrency
包。与使用synchronized
或volatile
撰写的任何内容相比,和更有效。
如果两个线程都使用合适的内存屏障,则只保证一个线程的操作对另一个线程可见。例如,编写和阅读volatile
变量,或输入synchronized
块。跳过内存障碍会更快,但由于你的程序被破坏,你的效率为零。