JUC.Condition学习笔记[附详细源码解析]


目录

Condition的概念

大体实现流程

  I.初始化状态
  II.await()操作
  III.signal()操作

3个主要方法

  Condition的数据结构
  线程何时阻塞和释放
  await()方法
  signal()和signalAll()方法

Condition示例:生产者和消费者


JUC提供了Lock可以方便的进行锁操作,但是有时候我们也需要对线程进行条件性的阻塞和唤醒,这时我们就需要condition条件变量,它就像是在线程上加了多个开关,可以方便的对持有锁的线程进行阻塞和唤醒。

JUC锁机制(Lock)学习笔记中,我们了解到AQS有一个队列,同样Condition也有一个等待队列,两者是相对独立的队列,因此一个Lock可以有多个Condition,Lock(AQS)的队列主要是阻塞线程的,而Condition的队列也是阻塞线程,但是它是有阻塞和通知解除阻塞的功能 Condition阻塞时会释放Lock的锁,阻塞流程请看下面的Condition的await()方法。

CM4J 参考文章列表: http://www.goldendoc.org/2011/06/juc_condition/ http://www.blogjava.net/xylz/archive/2010/07/08/325540.html