Java CookBook--Using a BlockingBuffer--by Tim O'Brien 整理by博主

  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 Buffer
		Buffer buffer=BlockingBuffer.decorate(new BoundedFifoBuffer());
		//Create Thread to continuously remove() from the previous Buffer
		BufferListener 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;
    }
	@Override
	public void run() {
		while(true){
			String message=(String)buffer.remove();
			System.out.println(message);
		}
		
	}
	
}

结果如下:

Hello World!
Goodbye,Y'all.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值