手机扫码查看
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(生产者,消费者)
- 本页地址 http://www.evshou.com/?p=2228
- 上一篇 <<2020java教程:匿名内部类完成生产者和消费者
- 下一篇 >>2020java教程:IO框架


发表评论