当前位置: 首页 > 后端技术 > Java

JDK8newReentrantLock()锁流程(二)

时间:2023-04-01 15:42:38 Java

newReentrantLock(true);lockprocess:protectedfinalbooleantryAcquire(intacquires){//获取当前线程finalThreadcurrent=Thread.currentThread();//获取状态值intc=getState();//还没有线程被占用if(c==0){//!(头节点和尾节点不是一个节点&&(头节点的next->NULLorheadnode.next节点不是当前线程))//也就是说head和tail是一个节点或者头节点。下一个节点的线程为当前线程返回真;}}//当前线程等于独占线程elseif(current==getExclusiveOwnerThread()){//statevalue+1intnextc=c+acquires;if(nextc<0)thrownewError("超过最大锁计数");//重新分配状态值setState(nextc);返回真;}//否则returnfalsereturnfalse;}如果获取锁失败,用JDK8加锁newReentrantLock()过程(1)中的过程是一样的!