多线程以原子方式汇总大量值

Mic*_*hmi 4 java multithreading

我正在开发一个应用程序,我们有大量的线程,并且必须以原子方式添加100的值.我正在使用AtomicLong哪种工作,但仍需要提高性能.有没有比AtomicLong提供更好性能的东西?

sol*_*4me 5

您可以使用LongAdder.LongAdder提供了比AtomicLong更好的性能.我建议阅读这篇文章,其中作者发布了基准测试结果并解释了有关LongAdder性能的许多细节.但简而言之LongAdder延伸Striped64,处理contentation利用细胞的哈希表退出好.因此,当2个线程尝试放置一些值时,它们很有可能最终将值放在不同的单元格中.Cell类使用Padding stratergy来减少CPU缓存内容.此外,如果您查看源代码,那么您会发现该单元类使用CAS.

Unsafe.compareAndSwap操作是原子操作.它们指向一块内存(在这种情况下由this和valueOffset组成,它们一起指向值),一个比较值和一个交换值.如果JVM发现寻址内存的值等于比较值,则它将交换值存储在已寻址的内存中并返回true.这意味着CAS操作是一种快速且线程安全的方式来更新变量的值,并获得有关操作是否成功或是否存在争用的反馈.