Java CookBook--Using a BlockingBuffer--by Tim O'Brien 整理by博主
来源:互联网 发布:mac sumbline 注册码 编辑:程序博客网 时间:2024/06/06 03:21
BlockingBuffer的使用:在操作对象前需要等待输入的情况要用到BlockingBuffer
Maven项目使用前,加入下述依赖在你的项目pom.xml中。
<dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.1</version></dependency>在多线程的情况下,才能验证BlockingBuffer,以下是一个简单的BlockingBuffer使用实例,主线程往BlockingBuffer中添加对象,而listenerThread则remove该对象,此时BlockingBuffer的作用显现,虽然listenerThread线程先一步启动,BlockingBuffer也会先等待对象的加入,再执行删除,故不会报错。
import org.apache.commons.collections.Buffer;import org.apache.commons.collections.buffer.BlockingBuffer;import org.apache.commons.collections.buffer.BoundedFifoBuffer;public class BufferTest {public static void main(String[] args) { /* * Your system needs to wait for input and act on an object the moment it is * added to a Buffer. To achieve this, you need your application to block until * input is received, use BlockingBuffer to decorate an instance of Buffer. * when a process calls get() or remove() on a buffer decorated with BlockingBuffer, * the decorated buffer does not return a value until it has an object to return. *///create a Blocking BufferBuffer buffer=BlockingBuffer.decorate(new BoundedFifoBuffer());//Create Thread to continuously remove() from the previous BufferBufferListener listener=new BufferListener(buffer);Thread listenerThread=new Thread(listener);/* * The listenerThread will block on a call to buffer.remove() within the run() * method of BufferListener, an object that runs in a separate thread and * waits for objects to be added to a BlockingBuffer. */listenerThread.start();buffer.add("Hello World!");buffer.add("Goodbye,Y'all.");}}
BufferListner的实现:
import org.apache.commons.collections.Buffer;/** * a BlockingBuffer can only be demonstrated by an example * that deals with multiple threads.BufferListener implements * Runnable defined for this. * * */public class BufferListener implements Runnable { private Buffer buffer; public BufferListener(Buffer buffer){ this.buffer=buffer; }@Overridepublic void run() {while(true){String message=(String)buffer.remove();System.out.println(message);}}}
结果如下:
Hello World!Goodbye,Y'all.
0 0
- Java CookBook--Using a BlockingBuffer--by Tim O'Brien 整理by博主
- Java CookBook--Using a Bag--by Tim O'Brien 整理by博主
- Java CookBook--Using a Buffer--by Tim O'Brien 整理by博主
- Java CookBook--Creating a Priority Queue--by Tim O'Brien 整理by博主
- Java CookBook Learning Day1st--HTTP (by Tim O'Brien)
- Java CookBook Learning Day2nd--HTTP (by Tim O'Brien)
- Java CookBook Learning Day3rd--HTTP (by Tim O'Brien)
- Java CookBook Learning Day4th--HTTP (by Tim O'Brien)
- Java CookBook Learning Day5th--HTTP (by Tim O'Brien)
- Retrieving a Key by a Value--by Tim O'Brien 整理by博主
- Storing Multiple Values in a Map--by Tim O'Brien 整理by博主
- What Is Web 2.0 ? --by Tim O'Reilly (一)
- What Is Web 2.0 ? --by Tim O'Reilly (二)
- What Is Web 2.0 ? --by Tim O'Reilly (三)
- What Is Web 2.0 ? --by Tim O'Reilly (四)
- What Is Web 2.0 ? --by Tim O'Reilly (五)
- What Is Web 2.0 ? --by Tim O'Reilly (六)
- Excel by Example: A Microsoft Excel Cookbook for Electronics Engineers
- 微信api 图文消息案例
- 2016.02.17回顾
- AngularJs基本篇 二 (控制器属性 + 控制器方法)
- IOS SEL (@selector) 原理及使用总结
- bsgs算法
- Java CookBook--Using a BlockingBuffer--by Tim O'Brien 整理by博主
- 浏览器滚动条改变
- Android中AsyncTask使用详解
- 最全的静态网站生成器(开源项目)
- 编辑框控件用法
- Hadoop2.7.2版本分布式集群搭建详细记录
- android—binder进程间通讯流程分析
- 如何自学Android编程
- htmlparser判断网页文本包含关键词的三种方法