LinkedBlockingQueue 的使用

并发库中的BlockingQueue是一个比较好玩的类,顾名思义,就是阻塞队列。该类主要提供了两个方法put()和take(),前者将一个对象放到队列尾部,如果队列已经满了,就等待直到有空闲节点;后者从head取一个对象,如果没有对象,就等待直到有可取的对象。


package cn.com.classTest;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;

public class BlockingQueueTest extends Thread {

	public static BlockingQueue<String> queue = new LinkedBlockingQueue<String>(4);

	private int index;

	public BlockingQueueTest(int i) {
		this.index = i;
	}

	public void run() {
		try {
			queue.put(String.valueOf(this.index));
			System.out.println(this.index + ":" + Thread.currentThread().getName());
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String args[]) {
		ExecutorService service = Executors.newCachedThreadPool();
		for(int i = 0; i < 10; i++) {
			service.submit(new BlockingQueueTest(i));
		}
		Thread thread = new Thread() {

			public void run() {
				try {
					while(true) {
						Thread.sleep((int)(Math.random() * 1000));
						if(BlockingQueueTest.queue.isEmpty())
							break;
						String str = BlockingQueueTest.queue.take();
						System.out.println("take {" + str + "} out of queue!");
					}
				} catch(Exception e) {
					e.printStackTrace();
				}
			}
		};
		service.submit(thread);
		service.shutdown();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值