什么是类级、对象级、显式锁定和内在锁定?

The*_*ght 5 java multithreading locking

我一直在研究 Java 多线程概念。我越经历它们,我就越困惑。

现在我不明白Java中类级别、对象级别、显式锁定和内在锁定之间的区别。有人可以告诉我哪个是什么吗?另外,如果我能举一些例子来理解,那对我来说也会很有帮助。

Dun*_*nes 4

显式与内在

当您synchronized在对象上使用或间接作为方法签名的一部分使用时,您正在创建一个内在锁。您依赖于与所有对象和类关联的内置锁。

Java 5+ 包中提供了显式锁java.util.concurrent.locks。最常用的类可能是ReentrantLock. 它们提供了使用内在锁的替代方案,并提供了内在锁无法实现的功能。

类级别与对象级别

这种区别仅适用于内在锁。如果您有同步静态方法,则使用的内在锁将与类对象本身关联。如果您在对象实例上进行同步(或具有同步实例方法),它将是对象级锁。


进一步阅读

Brian Goetz 的《Java 并发实践》是一本优秀的书,可以帮助您理解 Java 中多线程编程的噩梦般的混乱世界。