并发queue的简单介绍(一)
来源:互联网 发布:unity3d ios 红色问号 编辑:程序博客网 时间:2024/06/07 00:02
ConcurrentLinkedQueue高性能的队列它是不阻塞的,BlockingQueue是阻塞的队列
ConcurrentLinkedQueue适合在高并发场景下的队列,通过无锁的方式 实现了高并发状态下的
高性能.通常情况下性能要优于BlockingQueue.它是基于链接点的无界的安全队列.该队列的元素
遵循先进先出的原则.该队列不允许null元素.
小案例:
public static void main(String[] args) {
ConcurrentLinkedQueue<String> q = new ConcurrentLinkedQueue<String>();
q.offer("a");
q.offer("b");
q.offer("c");
q.offer("d");
q.add("e");
System.out.println(q.poll());//从头部取出元素 并从队列里删除
System.out.println(q.size());
System.out.println(q.peek());
System.out.println(q.size());
}
BlockingQueue的实现类
/*
* BlockingQueue的实现类
*
* ArrayBlockingQueue 基于数组的阻塞队列,在ArrayBlockingQueue维护一定长度的数组
* 以便缓存队列中的数据对象,其内部没有实现读写分离,也就意味着生产和消费不能完全并行,
* 长度是固定的 也叫有界队列
*
* LinkedBlockingQueue 基于链表的阻塞队列,同ArrayBlockingQueue类似,其内部也维持着一个
* 数据缓冲队列(该队列由一个链表构成),LinkedBlockingQueue之所以能够高效处理并发数据,
* 是因为内部采用分离锁(读写分离两个锁),从而实现生产者和消费者完全分离,他是一个无界队列
*
* SynchronousQueue 一种没有缓冲的队列,生产者的数据直接被消费者获取并消费
*
*
* */
ArrayBlockingQueue<String> array = new ArrayBlockingQueue<>(5);
array.put("a");
array.put("b");
array.add("c");
array.add("d");
array.add("e");
System.out.println(array.offer("a", 5, TimeUnit.SECONDS));
//阻塞队列
LinkedBlockingQueue<String> q = new LinkedBlockingQueue<>();
q.offer("a");
q.offer("b");
q.offer("c");
q.offer("d");
q.offer("e");
q.offer("f");
List<String> list = new ArrayList<String>();
System.out.println(q.drainTo(list,3));
System.out.println(list.size());
for(String string:list){
System.out.println(string);
}
List<String> list = new ArrayList<String>();
System.out.println(q.drainTo(list,3));
System.out.println(list.size());
for(String string :list){
System.out.println(string);
}
SynchronousQueue没有任何容量
正确案例
final SynchronousQueue<String> q = new SynchronousQueue<>(); Thread t1 = new Thread(new Runnable() { @Override public void run() { try { System.out.println(q.take()); }catch (InterruptedException e){ e.printStackTrace(); } } }); t1.start(); Thread t2 = new Thread(new Runnable() { @Override public void run() { q.add("dddd"); } }); t2.start();}
- 并发queue的简单介绍(一)
- 并发queue的简单介绍(二)
- 并发Queue一
- (C#)使用队列(Queue)解决简单的并发问题
- 使用队列(Queue)解决简单的并发问题
- Java并发总结(一): 线程的介绍及创建
- Java并发编程的暗自努力(一)初步介绍
- Spring(一一些简单的介绍)
- 一:Java 并发和多线程的介绍
- GCD介绍(一): 基本概念和Dispatch Queue
- GCD介绍(一): 基本概念和Dispatch Queue
- GCD介绍(一): 基本概念和Dispatch Queue
- GCD介绍(一): 基本概念和Dispatch Queue
- GCD介绍(一): 基本概念和Dispatch Queue
- GCD介绍(一): 基本概念和Dispatch Queue
- GCD介绍(一): 基本概念和Dispatch Queue
- GCD介绍(一): 基本概念和Dispatch Queue
- GCD介绍(一): 基本概念和Dispatch Queue
- python-numpy
- 大数据人才稀缺 入行恰逢其时
- 欢迎使用CSDN-markdown编辑器
- linux下装apache踩过的坑
- 网站制作图表插件库汇总
- 并发queue的简单介绍(一)
- Android字符串判空处理
- 关于mongodb ,redis,memcache之间见不乱理还乱的关系和作用
- Secure Multi-party Computation
- 我的Linux笔记
- Linux环境下Tomcat安装
- XAMARIN Android获取WIFIMAC地址的方法
- HDU6070Dirt Ratio(二分+线段树)
- 关于springmvc接收前端日期类参数