2121
2222##### getState
2323```
24- protected final int getState() {
25- return state;
26- }
24+ protected final int getState() {
25+ return state;
26+ }
2727```
2828返回同步状态的当前值。此操作具有 volatile 读的内存语义。
29- 返回:
30- 当前状态值
29+
3130
3231##### setState
3332```
@@ -42,80 +41,57 @@ newState - 新的状态值
4241
4342##### compareAndSetState
4443```
45- protected final boolean compareAndSetState(int expect, int update) {
46- // See below for intrinsics setup to support this
47- return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
48- }
44+ protected final boolean compareAndSetState(int expect, int update) {
45+ // See below for intrinsics setup to support this
46+ return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
47+ }
4948```
5049compareAndSwap即CAS,详细可查找[ Java并发编程 -- Atomic包] ( https://www.jianshu.com/p/288bdd29ec06 ) 文章。
5150如果当前状态值等于预期值,则以原子方式将同步状态设置为给定的更新值。此操作具有 volatile 读和写的内存语义。
52- ###### 参数:
53- expect - 预期值
54- update - 新值
55- ###### 返回:
51+
5652如果成功,则返回 true。返回 false 指示实际值与预期值不相等。
5753
5854
55+
5956##### tryAcquire
6057```
61- protected boolean tryAcquire(int arg) {
62- throw new UnsupportedOperationException();
63- }
58+ protected boolean tryAcquire(int arg) {
59+ throw new UnsupportedOperationException();
60+ }
6461```
6562试图在独占模式下获取对象状态。此方法应该查询是否允许它在独占模式下获取对象状态,如果允许,则获取它。
6663
6764此方法总是由执行 acquire 的线程来调用。如果此方法报告失败,则 acquire 方法可以将线程加入队列(如果还没有将它加入队列),直到获得其他某个线程释放了该线程的信号。可以用此方法来实现 lock.tryLock()方法。默认实现将抛出[ UnsupportedOperationException] ( http://tool.oschina.net/uploads/apidocs/jdk-zh/java/lang/UnsupportedOperationException.html " java.lang 中的类 ") 。
68- ###### 参数:
69- arg - acquire 参数。该值总是传递给 acquire 方法的那个值,或者是因某个条件等待而保存在条目上的值。该值是不间断的,并且可以表示任何内容。
70- ###### 返回:
65+
7166如果成功,则返回 true。在成功的时候,此对象已经被获取。
72- ###### 抛出:
73- [ IllegalMonitorStateException] ( http://tool.oschina.net/uploads/apidocs/jdk-zh/java/lang/IllegalMonitorStateException.html " java.lang 中的类 ") - 如果正在进行的获取操作将在非法状态下放置此同步器。必须以一致的方式抛出此异常,以便同步正确运行。
74- [ UnsupportedOperationException] ( http://tool.oschina.net/uploads/apidocs/jdk-zh/java/lang/UnsupportedOperationException.html " java.lang 中的类 ") - 如果不支持独占模式
7567
7668##### tryRelease
7769```
78- protected boolean tryRelease(int arg) {
79- throw new UnsupportedOperationException();
80- }
70+ protected boolean tryRelease(int arg) {
71+ throw new UnsupportedOperationException();
72+ }
8173```
8274试图设置状态来反映独占模式下的一个释放。
8375此方法总是由正在执行释放的线程调用。
8476
8577默认实现将抛出 UnsupportedOperationException。
8678
87- ###### 参数:
88- arg - release 参数。该值总是传递给 release 方法的那个值,或者是因某个条件等待而保存在条目上的当前状态值。该值是不间断的,并且可以表示任何内容。
89- ###### 返回:
90- 如果此对象现在处于完全释放状态,从而使等待的线程都可以试图获得此对象,则返回 true;否则返回 false。
91- ###### 抛出:
92- IllegalMonitorStateException - 如果正在进行的释放操作将在非法状态下放置此同步器。必须以一致的方式抛出此异常,以便同步正确运行。
93- UnsupportedOperationException - 如果不支持独占模式
94-
9579##### tryAcquireShared
9680```
97- protected int tryAcquireShared(int arg) {
98- throw new UnsupportedOperationException();
99- }
81+ protected int tryAcquireShared(int arg) {
82+ throw new UnsupportedOperationException();
83+ }
10084```
10185试图在共享模式下获取对象状态。此方法应该查询是否允许它在共享模式下获取对象状态,如果允许,则获取它。
10286此方法总是由执行 acquire 线程来调用。如果此方法报告失败,则 acquire 方法可以将线程加入队列(如果还没有将它加入队列),直到获得其他某个线程释放了该线程的信号。
10387
10488默认实现将抛出 UnsupportedOperationException。
10589
106- 参数:
107- arg - acquire 参数。该值总是传递给 acquire 方法的那个值,或者是因某个条件等待而保存在条目上的值。该值是不间断的,并且可以表示任何内容。
108- 返回:
109- 在失败时返回负值;如果共享模式下的获取成功但其后续共享模式下的获取不能成功,则返回 0;如果共享模式下的获取成功并且其后续共享模式下的获取可能够成功,则返回正值,在这种情况下,后续等待线程必须检查可用性。(对三种返回值的支持使得此方法可以在只是有时候以独占方式获取对象的上下文中使用。)在成功的时候,此对象已被获取。
110- 抛出:
111- IllegalMonitorStateException - 如果正在进行的获取操作将在非法状态下放置此同步器。必须以一致的方式抛出此异常,以便同步正确运行。
112- UnsupportedOperationException - 如果不支持共享模式
113-
11490##### tryReleaseShared
11591```
116- protected boolean tryReleaseShared(int arg) {
117- throw new UnsupportedOperationException();
118- }
92+ protected boolean tryReleaseShared(int arg) {
93+ throw new UnsupportedOperationException();
94+ }
11995```
12096试图设置状态来反映共享模式下的一个释放。
12197此方法总是由正在执行释放的线程调用。
0 commit comments