Java NIO-Lock.unlock
来源:互联网 发布:ubuntu认证失败 编辑:程序博客网 时间:2024/05/23 02:00
unlock用来释放锁,使用lock保护临界区,但是临界区通常会出现异常,所以unlock我们会放在finall语句中执行。
lock.lock();
try{
//do something
} finally {
lock.unlock();
}
Lock的实现类ReentrantLock中unlock的实现来自其成员变量sync实现.
public void unlock() {
sync.release(1);
}
具体调用AbstractQueuedSynchronized对象的release方法。
public final boolean release(int arg) {
if (tryRelease(arg)) {
Node h = head;
if (h != null && h.waitStatus != 0)
unparkSuccessor(h);
return true;
}
return false;
}
/**
* Wakes up node's successor, if one exists.
*
* @param node the node
*/
private void unparkSuccessor(Node node) {
/*
* If status is negative (i.e., possibly needing signal) try
* to clear in anticipation of signalling. It is OK if this
* fails or if status is changed by waiting thread.
*/
int ws = node.waitStatus;
if (ws < 0)
compareAndSetWaitStatus(node, ws, 0);
/*
* Thread to unpark is held in successor, which is normally
* just the next node. But if cancelled or apparently null,
* traverse backwards from tail to find the actual
* non-cancelled successor.
*/
Node s = node.next;
if (s == null || s.waitStatus > 0) {
s = null;
for (Node t = tail; t != null && t != node; t = t.prev)
if (t.waitStatus <= 0)
s = t;
}
if (s != null)
LockSupport.unpark(s.thread);
}
0 0
- Java NIO-Lock.unlock
- 转载:Java高级-线程同步lock与unlock使用
- Java高级-线程同步lock与unlock使用
- Java高级-线程同步lock与unlock使用
- Java线程同步lock和unlock的用法
- Java高级-线程同步lock与unlock使用
- Lock与Unlock
- DirectX lock 与 unlock?
- 检讨 lock&unlock
- 渲染优化 lock unlock
- lock与unlock
- Mysql lock与unlock
- 渲染优化 lock unlock
- Java NIO-锁机制Lock
- D3DLOCK_NOOVERWRITE。D3DLOCK_DISCARD lock 和unlock
- wake lock/ wake unlock 应用
- mysql lock tables unlock tables
- ReentrantLock(二)Lock.unlock()分析
- javascript学习笔记
- iOS 用StackView的第三方FDStackView,有时会出现crash,'NSInternalInconsistencyException', reason: 'Multiplier is
- 利用STL栈将中缀表达式转换成后缀表达式输出
- java 多线程 wait notify sleep
- 线程笔记
- Java NIO-Lock.unlock
- 高等代数中行列式的计算总结
- C#中将ListView中数据导出到Excel代码
- Cocos2dx——戏如人生(1)
- 两个栈实现一个队列
- 括号匹配
- UITableView大总结(上)
- JavaScript学习总结(一)
- [iOS]Xcode升级后,安装的插件失效