zoukankan      html  css  js  c++  java
  • JAVA线程锁lock下Condition高级使用-多个Condition的整合使用

    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    /**
     * 利用多个Condition来实现一个可阻塞的缓冲区
     * @author duwenlei
     *
     */
    public class BoundedBuffer {
        
        private final Lock lock = new ReentrantLock();
        private final Condition notFull = lock.newCondition();
        private 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{
            Object obj = null;
            lock.lock();
            try {
                while(count == 0){    
                    notEmpty.await();    //已经空了,等待
                }
                obj = items[takeptr];
                if(++takeptr == items.length) takeptr=0;
                --count;
                notFull.signal();
                return obj;
            }finally{
                lock.unlock();
            }
        }
    }
  • 相关阅读:
    HDOJ.1263
    另一种跳转actvity方式
    [转]Android中用Java获取时间实例
    获得当前时间的方法
    3d动画切换
    登录跳转效果
    activity 成popupwindow效果
    自定义preference的使用等等
    edittext输入框的背景效果
    自定义ListPreference
  • 原文地址:https://www.cnblogs.com/duwenlei/p/5112552.html
Copyright © 2011-2022 走看看