Board logo

标题: Java并发编程-AbstractQueuedSynchronizer源码分析(2) [打印本页]

作者: look_w    时间: 2019-1-17 19:19     标题: Java并发编程-AbstractQueuedSynchronizer源码分析(2)

API说明实现自定义同步器时,需要使用同步器提供的getState()、setState()和compareAndSetState()方法来操纵状态的变迁。
方法名称描述
protected boolean tryAcquire(int arg)排它的获取这个状态。这个方法的实现需要查询当前状态是否允许获取,然后再进行获取(使用compareAndSetState来做)状态。
protected boolean tryRelease(int arg) 释放状态。
protected int tryAcquireShared(int arg)共享的模式下获取状态。
protected boolean tryReleaseShared(int arg)共享的模式下释放状态。
protected boolean isHeldExclusively()在排它模式下,状态是否被占用。
实现这些方法必须是非阻塞而且是线程安全的,推荐使用该同步器的父类java.util.concurrent.locks.AbstractOwnableSynchronizer来设置当前的线程。
开始提到同步器内部基于一个FIFO队列,对于一个独占锁的获取和释放有以下伪码可以表示。
获取一个排他锁。
[url=][/url]
01    while(获取锁) {02        if (获取到) {03            退出while循环04        } else {05            if(当前线程没有入队列) {06                那么入队列07            }08            阻塞当前线程09        }10    }[url=][/url]




释放一个排他锁。
1    if (释放成功) {2        删除头结点3        激活原头结点的后继节点4    }




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0