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

  • 相关阅读:
    WINDOWS API ——GETFILETIME——获取文件时间
    lua 源码分析之线程对象lua_State
    GPL、BSD、MIT、Mozilla、Apache、LGPL开源协议介绍
    BOOST 线程完全攻略
    宏定义中#和##符号的使用和宏定义展开问题
    weak_ptr<T>智能指针
    轻松记住大端小端的含义(附对大端和小端的解释)
    关于VC预定义常量_WIN32,WIN32,_WIN64
    VC 预定义宏
    php技术之路
  • 原文地址:https://www.cnblogs.com/cxyxiaobao/p/12388953.html
Copyright © 2011-2022 走看看