• Java多线程系列 JUC锁06 Condition条件


    Condition介绍

    Condition中提供了一组类似于Object中的监视器方法。与Lock配合可以完成等待通知模式。

    Lock lock = new ReentrantLock();
    Condition condition1 = lock.newCondition();//创建和该锁关联的条件锁
    Condition condition2 = lock.newCondition();//创建和该锁关联的条件锁

    Condition只能通过lock.newCondition()方法获取,所以Condition是依赖于Lock的,而在调用这个方法之前,线程需要先获得锁,同时,在一个Lock中,可以获取多个Condition对象。

    Condition函数列表

     1   /** 使当前线程进入等待状态,直到被通知(signal/signalAll)或中断,当前线程从await()方法返回的情况包括:
     2      * 1.其他线程调用该condition的signal()或者signalAll()方法,而且当前线程被选中唤醒;
     3      * 2.其他线程调用interrupt()方法中断当前线程;
     4      * 如果当前线程从await()方法返回,那么表明该线程已经获取了Condition对象所对应的锁。
     5      */
     6     void await()
     7 
     8     // 使当前进入等待状态直到被通知、中断或者超时
     9     boolean await(long time, TimeUnit unit)
    10 
    11     /** 使当前进入等待状态直到被通知、中断或者超时;
    12      * 返回值表示剩余的时间,如果在nanosTimeout纳秒之前被唤醒,那么返回值就是nanosTimeout的实际耗时,如果返回值是0或则负数,那么可以认定已经超时了。
    13      */
    14     long awaitNanos(long nanosTimeout)
    15 
    16     // 使当前线程进入等待状态直到被通知,但是不会相应中断。 
    17     void awaitUninterruptibly()
    18 
    19     // 使当前线程进入等待状态直到被通知、中断或者到某个时间。如果没有到指定时间就被通知,方法返回true,否则到了直到的时间,方法返回false。
    20     boolean awaitUntil(Date deadline)
    21 
    22     // 唤醒一个等待在Coindition上的线程,该线程从等待方法返回前必须获得与Condition相关联的锁。
    23     void signal()
    24 
    25     // 唤醒所有等待在Condition上的线程,能够从等待方法返回的线程必须获得与Condition相关联的锁。
    26     void signalAll()

     Condition是一个接口,在并发包中,主要的实现是AbstractQueuedSynchronizer中的内部类ConditionObject。

  • 相关阅读:
    Linux下简单的多线程编程--线程池的实现
    Nginx配置免费SSL证书StartSSL,解决Firefox不信任问题
    php100视频教程解压密码
    PDO防注入原理分析以及使用PDO的注意事项
    php mysql PDO使用
    禁用网页右键菜单和鼠标拖动选择
    php pdo和mysqli对比选择
    PHP-mac下的配置及运行
    550 5.7.1 Client does not have permissions to send as this sender
    Entity framework code first
  • 原文地址:https://www.cnblogs.com/lizhouwei/p/9096101.html
Copyright © 2020-2023  润新知