管程(Moniter): 并发编程的基本心法( 四 )

  1. 对于入队操作 , 如果队列已满 , 就需要等待直到队列不满 , 所以这里用了notFull.await;

  2. 对于出队操作 , 如果队列为空 , 就需要等待直到队列不空 , 所以就用了notEmpty.await;

  3. 如果入队成功 , 那么队列就不空了 , 就需要通知条件变量:队列不空notEmpty对应的等待队列 。

  4. 如果出队成功 , 那就队列就不满了 , 就需要通知条件变量:队列不满notFull对应的等待队列 。

    在这段示例代码中 , 我们用了 Java 并发包里面的 Lock 和 Condition , 如果你看着吃力 , 也没关系 , 后面我们还会详细介绍 , 这个例子只是先让你明白条件变量及其等待队列是怎么回事 。 需要注意的是:await 和前面我们提到的 wait 语义是一样的;signal 和前面我们提到的 notify 语义是一样的 。 管程通过条件队列通信实现了同步 , 为我们 Java中的并发编程提供了基本支持 。

    推荐阅读