Java锁机制——AQS类Acquire方法
2015-11-15 20:49:11 1 举报
AQS(AbstractQueuedSynchronizer)类是Java锁机制的核心,它实现了一个FIFO队列,用于协调多个等待线程对共享资源的访问。Acquire方法是一个关键方法,用于尝试获取锁。当一个线程调用Acquire方法时,它会将当前线程封装成一个Node对象,并将其添加到同步队列的尾部。如果同步队列为空,那么当前线程将成功获取锁并立即返回;如果同步队列已满,那么当前线程将被阻塞,直到有其他线程释放锁或者当前线程被唤醒。在等待过程中,线程可能会被中断,这时需要处理中断异常。总之,Acquire方法实现了线程对共享资源的有序访问,保证了数据的安全性和一致性。
作者其他创作
大纲/内容
状态为0 当前结点等待获取锁 或“共享锁”状态compareAndSetWaitStatus 设置前继节点为SIGNAL状态 返回false
若interrupt= true当前线程就会被打断
获取成功
状态0 当prev线程被取消了,则设置prev的prev为当前node的prev 并返回false
是
将当前node作为head并释放之前的head
addWaiter创建一个Node current ThreadnextWaiter null加入到双向链表若为空则enq(node)创建头结点并返回node
若try失败或prev非hea
acquireQueued当前线程自旋 判断prev是否为head
若prev是head 再次进行tryAcquire
signal(-1) 说明prev已经被release 当前结点可以被park以便下次自旋时被启用
判断prev的waitStatus
Acquire
tryAcquire
shouldParkAfterFailedAcquire(prev,node)该线程是否应该进入等待状态
false
当返回为true parkAndCheckInterrupt尝试将线程进入等待状态
LockSupport park(this)unsafe.park 当前线程暂停并返回Thread.interrupted()
0 条评论
下一页