zoukankan      html  css  js  c++  java
  • condition类

      任意一个Java对象,都拥有一组监视器方法(定义在Object类中),主要包括wait,notify,notifyAll方法,这些方法与synchornized关键字相配合,可以实现等待/通知模式。

      Condition接口也提供了类似的Object的监视器方法,与Lock配合可以实现等待/通知模式。

    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    // condition 实现队列线程安全。
    public class QueueDemo {
        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();
            }
        }
        // 读取数据的线程,调用take
        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();
            }
        }
    }

  • 相关阅读:
    sharepoint ECMA 添加指定的人员和指定的角色到某个list里
    sharepoint ECMA 添加User到Site组
    sharepoint ECMA PeopleEditor 清除选中的中的人员
    sharepoinT Modal Dialog
    sharepoint ECMA
    sharepoint 列表查询范围
    sharepoint 2013 添加Quickpart
    背包、队列和栈
    Java 同步块
    Andriod性能优化笔记
  • 原文地址:https://www.cnblogs.com/cxyxiaobao/p/12388953.html
Copyright © 2011-2022 走看看