当前位置:编程学习 > JAVA >>

多线程阻塞队列缓冲池

[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(); 
    } 
  }  

 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();
     }
   }
 }


 

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,