1

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

4

2 回答 2

1

当然,同步的安全性伴随着一些性能成本。例如,请参阅同步成本

于 2012-12-08T00:22:48.030 回答
1

该类AtomicInteger及其同级将与您可以用纯 Java 编写的任何等效功能一样快,并且通常会更快,因为它们很可能能够使用平台上可用的本机指令。

每当您编写并发程序时,请使用该java.util.concurrency包。它比你用or编写的任何东西都更健壮更高效。synchronizedvolatile

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

于 2012-12-08T00:47:19.887 回答