Java多线程Day21-JUC锁之Condition条件

Posted 攻城狮Chova

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多线程Day21-JUC锁之Condition条件相关的知识,希望对你有一定的参考价值。

基本概念

  • Condition的作用: 对锁进行更精确的控制
    • 对于同一个锁,可以创建多个Condition, 在不同的情况下使用不同的Condition
  • ConditionObject类之间的联系:
ConditionObject
等待await()wait()
唤醒signal()notify()
唤醒全部signalAll()notifyAll()
互斥锁或者共享锁synchronized关键字的同步锁

Condition方法

await

/**
 * 使当前线程处于等待状态
 * 当前线程在接收到唤醒信号或者被中断之前一直处于等待状态
 *  
 * @throw InterruptedException 被中断时会抛出异常
 */
void await() throws InterruptedException;

/**
 * 使当前线程处于等待状态
 * 当前线程在接收到唤醒信号,被中断之前或者到达指定等待的时间之前一直处于等待状态
 *  
 * @param time 指定的等待时间
 * @param unit 指定的等待时间的单位
 * @return boolean 如果等待时间没有结束则返回false,否则返回true
 * @throw InterruptedException 被中断时会抛出异常
 */
boolean await(long time, TimeUnit unit) throws InterruptedException;

awaitNanos

/**
 * 使当前线程处于等待状态
 * 当前线程在接收到唤醒信号,被中断之前或者到达指定等待的时间之前一直处于等待状态
 *  
 * @param nanosTimeout 指定的等待的最大时间
 * @return long 剩余的等待时间
 * @throw InterruptedException 被中断时会抛出异常
 */
long awaitNanos(long nanosTimeout) throws InterruptedException;

awaitUninterruptibly

/**
 * 使当前线程处于等待状态
 * 当前线程在接收到唤醒信号之前一直处于等待状态 
 */
void awaitUninterruptibly();

awaitUtil

/**
 * 使当前线程处于等待状态
 * 当前线程在接收到唤醒信号,被中断之前或者到达指定的截止日期之前一直处于等待状态
 *  
 * @param deadline 截止日期
 * @return boolean 如果超过指定的日期则返回true,如果未到指定的截止日期则返回false
 * @throw InterruptedException 如果被中断则抛出异常 
 */
boolean awaitUntil(Date deadline) throws InterruptedException;

signal

/**
 * 唤醒一个等待线程
 */
void signal();

signalAll

/**
 * 唤醒所有等待线程
 */
void signalAll();

以上是关于Java多线程Day21-JUC锁之Condition条件的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程Day23-JUC锁之共享锁

Java多线程Day22-JUC锁之LockSupport

Java多线程Day22-JUC锁之LockSupport

详解Java多线程锁之synchronized

多线程编程-- part5.1 互斥锁之公平锁-获取锁

多线程编程-- part5.1 互斥锁之公平锁-释放锁