舒大少博客

一个95后少年的个人博客

当前时间为:
欢迎大家来到舒大少博客http://www.evshou.com,广告合作以及淘宝商家推广请微信联系15357240395

2020java教程:Queue队列(接口)

2020-09-01 16:08:22
swq1822677238

手机扫码查看

2020java教程:Queue队列(接口)

Queue队列(接口)

Collection的子接口,表示队列FIFO(先进先出)
常用方法
– 抛出异常:
— boolean add((E e);//顺序添加一个元素(到达上限后,再添加则会抛异常)
— E remove()//获得第一个元素并移除(如果队列没有元素时,则会抛异常)
— E element()//获得第一个元素但不移除(如果队列没有元素时,则会抛异常)
– 返回特殊值:
— boolean offer(E e)//顺序添加一个元素(到达上限后,再添加则会返回false)
— E poll()//获得第一个元素并移除(如果队列没有元素时,则返回null)
— E peek()//获得第一个元素但不移除(如果队列没有元素时,则返回null)

ConcurrentLinkedQueue
线程安全,可高效读写的队列,高并发下性能最好的队列。
无锁、CAS比较交换算法,修改的方法包含三个核心参数(V,E,N)
V:要更新的变量。E:预期值。N:新值
只有当V==E时,V==N;否则表示已被更新过,则取消当前操作。

Queue<String> q=new ConcurrentLinkedQueue<>();
q.offer("Hello");
q.offer("World");
System.out.println(q.poll());
System.out.println(q.peek());

BlockingQueue接口(阻塞队列)
Queue的子接口,阻塞的队列,增加了两个线程状态为无限期等待的方法。
方法:
void put(E e)//将指定元素插入此队列中,如果没有可用空间,则等待。
E take()//获取并移除此队列头部元素,如果没有可用元素,则等待。
可用于解决生产者、消费之问题。

阻塞队列
ArrayBlockingQueue:
数组结构实现,有界队列(手工固定上限)

Queue<String> q=new ArrayBlockingQueue<String>(10);
q.offer("World");
System.out.println(q.peek());

LinkedBlockingQueue
链表结构实现,无界队列(默认上限Intger.MAX_VALUE)

Queue<String> q=new LinkedBlockingQueue<>();
q.offer("World");
System.out.println(q.peek());

总结

ExecutorService线程池接口,Executors工厂。
Callable线程任务、Future异步返回值。
Lock、ReentrantLock重入锁,ReentrantReadWriteLock读写锁。
CopyOnWriteArrayList线程安全的ArrayList
CopyOnWriteArraySet线程安全的ArraySet
ConcurrentHashMap线程安全的HashMap
ConcurrentLinkedQueue线程安全的Queue
ArrayBlockingQueue线程安全的阻塞Queue(生产者,消费者)

发表评论

邮箱地址不会被公开。 必填项已用*标注