有界缓存

Lock && Condition_实现有界缓存

五迷三道 提交于 2020-03-02 12:28:55
Lock && Condition_实现有界缓存 ‍ Lock是一种广义的内置锁,Condition也是一种 广义的内置条件队列 。 ‍ 内置条件队列存在一些缺陷。每个内置锁都只能有一个相关的条件队列, 因而多个线程可能在同一个条件队列上等待不同的条件谓词,并且在最常见的加锁模式下公开条件队列对象。 这些因素都使得无法满足在使用notifyAll时所有等待线程为同一类型的需求。 如果想编写一个带有多个条件谓词的并发对象,或者想获得除了条件队列可见性的更多控制权,就可以使用显示的Lock和Condition而不是内置锁和内置条件队列,这是一种更灵活的选择。 ‍ Lock比内置锁提供了更为丰富的功能,Condition同样比内置条件队列提供了更丰富的功能:在每个锁上可能存在多个等待、条件等待可以是可中断的、基于时限的等待,以及公平的或非公平的队列操作。 ‍ 与内置条件队列不同的是,对于每个Lock,可以有任意数量的Condition对象。Condition对象继承了相关的Lock对象的公平性,对于公平的锁,线程会依照FIFO顺序从Condition.await中释放。 下面这段程序给出了有界缓存的另一种实现,即‍ ‍ 使用两个Condition,分别为notFull和notEmpty ‍ ‍,用于表示” 非满 “和” 非空 “两个条件谓词。 当缓存为空时