Atomicity - Lock Vs atomic Vs binary-semaphore - Performance

时间:2017-10-05 19:24:45

标签: java multithreading concurrency semaphore atomicity

Monitor =互斥(锁定)+条件变量

每个Java对象都有一个监视器,保持原则。

synchronized关键字声称对象的监视器(lock + conditionvar)。

我的理解是,对于原子性,不需要conditionvar,lock(互斥)就足够了。

为了保持内存区域的原子性,Java提供了Lockatomic包和binary semaphore

对于原子性,哪种方法在性能方面更好?

1 个答案:

答案 0 :(得分:0)

这取决于访问模式:synchronized(var) { ... }是最简单的,因为它不需要显式解锁,这与ReentrantLock不同。这两个是相同的:synchronized(var)将锁定var,而Lock将锁定"本身" (所以说)。但ReentrantLock允许您获取扩展信息(有关详情,请参阅javadocisHeldByCurrentThread()getHoldCount())。

在性能方面,ReentrantReadWriteLock会在您有少量写入和许多读取时提高性能(因为您不需要锁定&em> #39;只能读取),但是在获取和释放锁时你应该格外小心,因为"ownable synchronizers"会使你的线程死锁(读写锁不会以同样的方式处理)。

但是,如果您想要读/写的数据是"简单类型" (如atomic package javadoc中所述),您将使用AtomicInteger等获得最佳性能,因为它们使用特定的优化CPU指令集,例如{{ 3}}在SSE *中。