java.util.concurrent.ReentrantLock
来源:互联网 发布:windows怎么取消共享 编辑:程序博客网 时间:2024/06/13 05:34
/** * Sync object for non-fair locks */ static final class NonfairSync extends Sync { private static final long serialVersionUID = 7316153563782823691L; /** * Performs lock. Try immediate barge, backing up to normal * acquire on failure. */ final void lock() { if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThread()); else acquire(1); } protected final boolean tryAcquire(int acquires) { return nonfairTryAcquire(acquires); } }
/** * Acquires in exclusive mode, ignoring interrupts. Implemented * by invoking at least once {@link #tryAcquire}, * returning on success. Otherwise the thread is queued, possibly * repeatedly blocking and unblocking, invoking {@link * #tryAcquire} until success. This method can be used * to implement method {@link Lock#lock}. * * @param arg the acquire argument. This value is conveyed to * {@link #tryAcquire} but is otherwise uninterpreted and * can represent anything you like. */ public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) selfInterrupt(); }
放入AQS队列
/** * Acquires in exclusive uninterruptible mode for thread already in * queue. Used by condition wait methods as well as acquire. * * @param node the node * @param arg the acquire argument * @return {@code true} if interrupted while waiting */ final boolean acquireQueued(final Node node, int arg) { boolean failed = true; try { boolean interrupted = false; for (;;) { final Node p = node.predecessor(); if (p == head && tryAcquire(arg)) { setHead(node); p.next = null; // help GC failed = false; return interrupted; } if (shouldParkAfterFailedAcquire(p, node) && parkAndCheckInterrupt()) interrupted = true; } } finally { if (failed) cancelAcquire(node); } }
ReentranLock.lock 只是把线程挂到队列,并不做阻塞,如果需要用到阻塞,可用
ReentranLock.newCondition()
Condition.await()
0 0
- java.util.concurrent.ReentrantLock
- java.util.concurrent.locks.ReentrantLock
- java.util.concurrent.locks.ReentrantLock 源码剖析
- java.util.concurrent 之 可重入锁ReentrantLock
- java.util.concurrent.locks.ReentrantLock重入锁源码解析
- java concurrent之ReentrantLock
- java.util.concurrent(JUC)的研究--》锁机制--》Lock与ReentrantLock
- java.util.concurrent包图文源码解析(二)——ReentrantLock
- Java Concurrent Lock ReentrantLock简介
- java concurrent系列3---ReentrantLock
- Java.concurrent.locks(2)-ReentrantLock
- 【java】 java.util.concurrent
- java.util.concurrent.CyclicBarrier
- java.util.concurrent 学习
- java.util.concurrent包
- java.util.concurrent 架构
- java.util.concurrent
- 关于 java.util.concurrent
- java对象与json对象间的相互转换
- 单例模式
- 生物学上描述DNA/RNA的长度常用的kb、nt、bp是指什么
- 登录验证
- 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例
- java.util.concurrent.ReentrantLock
- C++STL学习笔记
- 关于闭包问题的多种方法
- leetcode45. Jump Game II
- HDU 1841 Find the Shortest Common Superstring(KMP)
- 《大话设计模式》讨论
- CUDA driver version is insufficient for CUDA runtime version
- 这是我在南航读研第一年末,写下了第一篇博客
- JAVA 消息队列的使用场景