java 线程同步之condition_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java 线程同步之condition

java 线程同步之condition

 2014/8/16 18:19:35  arual  程序员俱乐部  我要评论(0)
  • 摘要:虽然condition的await()与signal()方法与object的wait()notify()方法功能类似,都实现线程间的通信。但condition还能实现waitnotify实现不了的功能。下面的例子是api上的一个例子,实现了一个阻塞队列classBoundedBuffer{finalLocklock=newReentrantLock();finalConditionnotFull=lock.newCondition();finalConditionnotEmpty=lock
  • 标签:Java 线程 同步

虽然condition的await() 与 signal() 方法与object的wait() notify() 方法功能类似,都实现线程间的通信。但condition还能实现wait notify实现不了的功能。

下面的例子是api上的一个例子,实现了一个阻塞队列

class="java">class BoundedBuffer {
   final Lock lock = new ReentrantLock();
   final Condition notFull  = lock.newCondition(); 
   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();
       items[putptr] = x;
       if (++putptr == items.length) putptr = 0;
       ++count;
       notEmpty.signal();
     } 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();
     }
   }
 }

?

  • 相关文章
发表评论
用户名: 匿名