目录
- 前言
- locks包 概况
- 各个类详解
- 总结
1.前言
首先,写本博客的目的,是为了让本大人阅读源码有个动力、有个记录、有个督促,并非为了引导大家学习locks包。因此,语法会有些混乱、会有些随性。但若您真的能从本博客学到了一些东西,那小弟在此也实感荣幸。此外,若有不正确或者理解有偏差的地方,欢迎大家批评指正。
--------第一天阅读源码的小渣滓
2.locks包 概况
由于没有该包的官方jdkdoc
3.各个类详解
3.1 Synchronizer 类体系
简介:可以由线程专有的同步器。后面所有的lock类都基于该同步器。
类层次关系:
可以看到其中AbstractOwnableSynchronizer是所有Sync的祖先。所以我们先来研究一下AbstractOwnableSynchronizer这个祖先类。
- Class1:AbstractOwnableSynchronizer
Introduce:
A synchronizer that may be exclusively owned by a thread. This class provides a basis for creating locks and related synchronizers that may entail a notion of ownership. The {@code AbstractOwnableSynchronizer} class itself does not manage or use this information. However, subclasses and tools may use appropriately maintained values to help control and monitor access and provide diagnostics.
翻译:
一个由线程专有的同步器。 该类提供了创建锁和可能需要所有权概念的相关同步器的基础。 AbstractOwnableSynchronizer类本身不管理或使用此信息。 但是,子类和工具可能会适当使用维护值以帮助控制和监视访问并提供诊断。
- 属性:
private transient Thread exclusiveOwnerThread;
//排他模式同步的当前所有者 方法:
protected final void setExclusiveOwnerThread(Thread thread)
//设置独占访问权限的线程,若thread为null,则没有线程拥有访问权限。并且该方法不设有强制的同步或者violate变量同步。
protected final Thread getExclusiveOwnerThread()
//获取最近设定的独占线程或者null。该方法不设有强制的同步或者violate变量同步。小结:该接口只是定义了独占同步的占有线程。
- Class2:AbstractQueuedLongSynchronizer
Introduction:
A version of {@link AbstractQueuedSynchronizer} in which synchronization state is maintained as a {@code long}. This class has exactly the same structure, properties, and methods as {@code AbstractQueuedSynchronizer} with the exception that all state-related parameters and results are defined as {@code long} rather than {@code int}. This class may be useful when creating synchronizers such as multilevel locks and barriers that require 64 bits of state.
翻译:
AbstractQueuedSynchronizer的另一版本,其中同步状态维护为long类型。 该类与AbstractQueuedSynchronizer具有完全相同的结构,属性和方法,除了所有与状态相关的参数和结果定义为long而不是int。 当创建同步器(例如需要64位状态的多级锁和障碍)时,此类可能很有用。
- 小结:该类只是AbstractQueuedSynchronizer类的一个long版本,我们可以先不关心该类。先看下面的AbstractQueuedSynchronizer类。
- Class3:AbstractQueuedSynchronizer
引用块内容