`

多线程阻塞队列缓冲池

 
阅读更多
 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();
     }
   } 
 }

分享到:
评论

相关推荐

    多线程并发处理的简单实现

    使用队列做缓冲池,通过工作者线程来处理并任务,实现线程空闲时阻塞,有任务令牌时回复服务。

    dotNet-turbo:.NET应用程序的有用类的集合(对象池,线程池,异步处理,队列,集合,多线程基元等)

    具有阻塞的线程安全队列(比BlockingCollection快5倍); 允许控制客户端输入的一些代码块; 允许限制每秒的最大请求数; -简单的控制反转容器; 弱引用订阅者的事件; -组织为双端队列元素的集合; -具有有限数量...

    Java NIO+多线程实现聊天室

    阻塞队列BlockingQueue,生产者消费者模式 选择器 渠道 字节缓冲区 ProtoStuff 高性能序列化 HttpClient连接池 Spring依赖注入 lombok简化POJO开发 原子指标 内置锁 竣工服务 log4j+slf4j日志 实现的功能 登录注销 ...

    NetStack:轻量级工具集,用于为多人游戏创建并发网络系统

    并发缓冲区多生产者多消费者先进先出无阻塞队列 并发池自稳定的半无锁环形缓冲器 不安全快速内存复制 建造 默认情况下,所有脚本都是针对.NET Framework 3.5编译的。 定义NET_4_6指令以为.NET Framework 4.6或更高...

    C++ Linux WebServer服务器

    利用IO复用技术Epoll与线程池实现多线程的Reactor高并发模型; 利用正则与状态机解析HTTP请求报文,实现处理静态资源的请求; 利用标准库容器封装char,实现自动增长的缓冲区; 基于小根堆实现的定时器,关闭超时...

    开涛高可用高并发-亿级流量核心技术

    15.2 缓冲队列 296 15.3 任务队列 297 15.4 消息队列 297 15.5 请求队列 299 15.6 数据总线队列 300 15.7 混合队列 301 15.8 其他队列 302 15.9 Disruptor+Redis队列 303 15.9.1 简介 303 15.9.2 XML配置 304 15.9.3...

    Windows内核安全与驱动开发光盘源码

    2.6.2 函数的多线程安全性 30 2.6.3 代码的中断级 32 2.6.4 WDK中出现的特殊代码 32 第3章 字符串与链表 35 3.1 字符串操作 35 3.1.1 使用字符串结构 35 3.1.2 字符串的初始化 36 3.1.3 字符串的拷贝 37 ...

    Windows内核安全驱动开发(随书光盘)

    2.6.2 函数的多线程安全性 30 2.6.3 代码的中断级 32 2.6.4 WDK中出现的特殊代码 32 第3章 字符串与链表 35 3.1 字符串操作 35 3.1.1 使用字符串结构 35 3.1.2 字符串的初始化 36 3.1.3 字符串的拷贝 37 ...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java核心知识点整理.pdf

    线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 .........................

    JAVA核心知识点整理(有效)

    2.1. 线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 .....................

Global site tag (gtag.js) - Google Analytics