码迷,mamicode.com
首页 > 编程语言 > 详细

_java5条件阻塞Condition的应用

时间:2014-09-05 09:51:31      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:io   使用   java   sp   on   c   new   应用   bs   

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的应用

标签:io   使用   java   sp   on   c   new   应用   bs   

原文地址:http://www.cnblogs.com/mxyhws/p/3957225.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!