【问题标题】:Is using AtomicInteger in a java multithreading program slower and inefficient than other methods of synchronization?在 java 多线程程序中使用 AtomicInteger 是否比其他同步方法更慢且效率低?
【发布时间】:2012-12-08 00:21:47
【问题描述】:

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

【问题讨论】:

  • 你的问题标题和你的问题完全不同。 AtomicInteger 是否比 no 同步慢?绝对地。 AtomicInteger 是否比其他类型的同步更快?也许。 (在并发应用程序中可以接受完全的非同步吗?很少。)
  • +1 @Louis。比较正确程序和错误程序的性能没有多大意义。

标签: java multithreading


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 2017-09-26
      • 2018-12-09
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多