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

  • 相关阅读:
    react的50个面试题
    什么是宏队列跟微队列
    宏队列与微队列
    数组都有哪些方法
    vuex 跟 vue属性
    高阶组件
    如何创建视图簇(View cluster)-SE54/SM34
    ◆◆0如何从维护视图(Maintenace view)中取数据-[VIEW_GET_DATA]
    ◆◆0如何在SM30维护表时自动写入表字段的默认值-事件(EVENT)
    ◆◆0SAP Query 操作教程
  • 原文地址:https://www.cnblogs.com/cxyxiaobao/p/12388953.html
Copyright © 2011-2022 走看看