gpt4 book ai didi

java - java并发包是用锁实现的吗?

转载 作者:行者123 更新时间:2023-12-01 17:03:26 26 4
gpt4 key购买 nike

从概念上讲,

Mutex

Reader's/Writer lock (Better form of Mutex)

Semaphore

Condition Variable

作为四种主要的同步机制,它们是纯粹基于锁的。不同的编程语言对这 4 种机制有不同的术语/行话。 POSIX pthread 包就是此类实现的一个示例。

前两个是使用自旋锁(Busy-wait)实现的。

最后两个是使用 sleep 锁实现的。

基于锁的同步在 CPU 周期方面是昂贵的。

但是,我了解到 java.util.concurrent 包不使用基于锁( sleep /旋转)的机制来实现同步。

我的问题:

java并发包是通过什么机制来实现同步的?因为自旋锁是CPU密集型的,并且由于频繁的上下文切换, sleep 锁比自旋锁的成本更高。

最佳答案

这很大程度上取决于您使用 java.util.concurrent 包的哪些部分(以及较小程度的实现)。例如。从 Java 1.7 开始,LinkedBlockingQueue 同时使用 ReentrantLocks 和 Conditions,而例如java.util.concurrent.atomic 类或 CopyOnWrite* 类依赖于 volatile + native 方法(插入适当的内存屏障)。

锁、信号量等的实际 native 实现也因架构和实现而异。

编辑:如果你真的关心性能,你应该 measure您的特定工作负载的性能。有些人比我聪明得多,比如 A. Shipilev (其网站上有关于该主题的大量信息)有关 JVM 团队的信息,他们从事这项工作并非常关心 JVM 性能。

关于java - java并发包是用锁实现的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26547467/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com