2012-12-08 37 views
1

我正在进行两个多线程Java程序的实验。我有一个不同步,另一个使用AtomicIntegerAtomicInteger要慢得多。我想这可能是因为方法AtomicInteger使用compareAndset()。我对么?在Java多线程程序中使用AtomicInteger比其他同步方法更慢,效率更低?

+5

您的问题标题和您的问题完全不同。 AtomicInteger慢于_no_同步吗?绝对。 AtomicInteger比其他类型的同步更快吗?也许。 (并发应用程序中是否允许完全非同步?很少,如果有的话)。 –

+0

+1 @Louis。比较一个正确的程序和一个不正确的程序之间的性能没有太大的意义。 – JimN

回答

1

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

无论何时编写并发程序,请使用java.util.concurrency软件包。这是更强大比你用​​或volatile写的任何东西都更有效率。

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