首页 > 代码库 > _java5条件阻塞Condition的应用

_java5条件阻塞Condition的应用

wait 和notify 在 synchronized 包含的范围中 必须与synchronized 使用同一个对象

可以在一个锁中设定 多个 condition 来执行等待的方法,这样的好处就是能实现多个

方法之间的等待执行。例如下面例子 的两个condition

 

class BoundedBuffer {

   final Lock lock = new ReentrantLock();

   final Condition notFull  = lock.newCondition(); //使用condition 来代替 wait 和 notify

   final Condition notEmpty = lock.newCondition();

 

   final Object[] items = new Object[100];

   int putptr, takeptr, count;

 

   public void put(Object x) throws InterruptedException {

     lock.lock();

     try {

       while (count == items.length)

         notFull.await();//这里要使用await 只是condition的专用方法

       items[putptr] = x;

       if (++putptr == items.length) putptr = 0;

       ++count;

       notEmpty.signal();//这也是condition的专用方法

     } finally {

       lock.unlock();

     }

   }

 

   public Object take() throws InterruptedException {

     lock.lock();

     try {

       while (count == 0)

         notEmpty.await();

       Object x = items[takeptr];

       if (++takeptr == items.length) takeptr = 0;

       --count;

       notFull.signal();

       return x;

     } finally {

       lock.unlock();

     }

   } 

_java5条件阻塞Condition的应用