美文网首页
Condition的awaitNanos的实现过程

Condition的awaitNanos的实现过程

作者: 倦飞知还 | 来源:发表于2018-03-11 11:22 被阅读0次

1.释放锁
2.轮询检查线程是否在同步线程上,如果在则退出自旋。否则检查是否已超过解除挂起时间,如果超过,则退出挂起,否则继续挂起线程到等待解除挂起。
3.退出挂起之后,采用自旋的方式竞争锁。

 public final long awaitNanos(long nanosTimeout)
                throws InterruptedException {
            if (Thread.interrupted())
                throw new InterruptedException();
          //将 
            Node node = addConditionWaiter(); 
         //
            long savedState = fullyRelease(node);
            final long deadline = System.nanoTime() + nanosTimeout;
            int interruptMode = 0;
        //采用自旋的方式检查是否已在同步队列当中
            while (!isOnSyncQueue(node)) {
                //如果挂起超过一定的时间,则退出
                if (nanosTimeout <= 0L) {
                    transferAfterCancelledWait(node);
                    break;
                }
                //继续挂起线程
                if (nanosTimeout >= spinForTimeoutThreshold)
                    LockSupport.parkNanos(this, nanosTimeout);
                if ((interruptMode = checkInterruptWhileWaiting(node)) != 0)
                    break;
                nanosTimeout = deadline - System.nanoTime();
            }
          //采用自旋的方式竞争锁
            if (acquireQueued(node, savedState) && interruptMode != THROW_IE)
                interruptMode = REINTERRUPT;
            if (node.nextWaiter != null)
                unlinkCancelledWaiters();
            if (interruptMode != 0)
                reportInterruptAfterWait(interruptMode);
            return deadline - System.nanoTime();
        }

相关文章

  • Condition的awaitNanos的实现过程

    1.释放锁2.轮询检查线程是否在同步线程上,如果在则退出自旋。否则检查是否已超过解除挂起时间,如果超过,则退出挂起...

  • Condition的实现

    ConditionObject是同步器AQS的内部类,因为Condition的操作需要获取相关联的锁,所以作为同步...

  • Condition的实现

    todo

  • ReentrantLock用法

    ReentrantLock实现同步锁 结果: Condition等待/唤醒 结果: 多个Condition实现部分...

  • Condition

    Condition 实现管程里面的条件变量 Lock和Condition实现的管程,线程等待和通知需要调用awai...

  • Condition 实现原理

    Condition 实现原理 说 Codition 前,需要说下 ConditioObject。Condition...

  • python多线程--Condition(条件对象)

    Condition class threading.Condition(lock=None这个类实现条件变量对象。...

  • iOS Condition

    condition实现多线程的同步用法:

  • java并发-Condition接口

    Condition的简单使用 使用Condition实现的有界队列 核心方法 await()方法源码分析 sign...

  • AQS之Condition

    AQS中还实现了Condition的功能。本文将通过ReentrantLock来分析在AQS中Condition的...

网友评论

      本文标题:Condition的awaitNanos的实现过程

      本文链接:https://www.haomeiwen.com/subject/ztqifftx.html