LinkedBlockingQueue 的使用

注意:(

        使用take()函数,如果队列中没有数据,则线程wait释放CPU,而poll()则不会等待,直接返回null;同样,空间耗尽时offer()函数不会等待,直接返回false,而put()则会wait,因此如果你使用while(true)来获得队列元素,千万别用poll(),CPU会100%的

常用方法:

一、添加元素

1、add 方法:如果队列已满,报java.lang.IllegalStateException: Queue full 错误

2、offer 方法:如果队列已满,程序正常运行,只是不再新增元素

3、put 方法:如果队列已满,阻塞

二、取元素

1、poll 方法:弹出队顶元素,队列为空时返回null

2、peek 方法:返回队列顶元素,但顶元素不弹出,队列为空时返回null

3、take 方法:当队列为空,阻塞

例子:

public class LinkedBlockingQueueTest {
 
	private static LinkedBlockingQueue<String> linkedBlockingQueue;
 
	public static void main(String[] args) {
 
		linkedBlockingQueue = new LinkedBlockingQueue<String>(20);
		// 1、add 方法:队列已满,报java.lang.IllegalStateException: Queue full 错误
		System.out.println("-----add  方法-----");
		for (int i = 0; i < 5; i++) {
			// linkedBlockingQueue.add(String.valueOf(i));
		}
		System.out.println(linkedBlockingQueue.size());
 
		// 2、offer 方法,队列已满,程序正常运行,只是不再新增元素
		System.out.println("-----offer方法-----");
		for (int i = 0; i < 20; i++) {
			linkedBlockingQueue.offer(String.valueOf(i));
		}
		System.out.println(linkedBlockingQueue.size());
 
		System.out.println("-----poll 方法-----");
		// 3、poll 方法,弹出队顶元素,队列为空时返回null
		for (int i = 0; i < 6; i++) {
			String e = linkedBlockingQueue.poll();
			System.out.println("取出元素:" + e);
		}
 
		System.out.println("-----peek 方法-----");
		// 4、peek 方法,返回队列顶元素,但顶元素不弹出,队列为空时返回null
		for (int i = 0; i < 5; i++) {
			String e = linkedBlockingQueue.peek();
			System.out.println("取出元素:" + e);
		}
 
		System.out.println("-----take 方法-----");
		// 5、take 方法,当队列为空,阻塞
		for (int i = 0; i < 10; i++) {
			String e = null;
			try {
				e = linkedBlockingQueue.take();
			} catch (InterruptedException e1) {
				e1.printStackTrace();
			}
			System.out.println("取出元素:" + e);
		}
 
		System.out.println("-----put  方法-----");
		// 6、put 方法,当队列满时,阻塞
		for (int i = 0; i < 30; i++) {
			try {
				String e = String.valueOf(i);
				linkedBlockingQueue.put(e);
				System.out.println("放入元素:" + e);
			} catch (InterruptedException e1) {
				e1.printStackTrace();
			}
		}
		System.out.println("队列深度:" + linkedBlockingQueue.size());
	}
 
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值