掌握基础知识,面试事半功倍。即将踏上Java开发岗位的同学们,一起来复习一下面试必备的基础知识吧。本文沈阳达内IT培训为大家介绍Java中的队列都有哪些,有什么区别?
1.BlockingQueue有四个具体的实现类,根据不同需求,选择不同的实现类:
2.ArrayBlockingQueue:基于数组结构的有界阻塞队列,规定大小的BlockingQueue,其构造函数必须带一个int参数来指明其大小。
其所含的对象是以FIFO(先入先出)顺序排序的
3.LinkedBlockingQueue:基于链表结构的阻塞队列,大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定。其所含的对象是以FIFO顺序排序的,吞吐量通常要高于ArrayBlockingQueue
4.PriorityBlockingQueue:具有优先级的无限阻塞队列,类似于LinkedBlockingQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数所带的Comparator决定的顺序
5.SynchronousQueue:不存储元素的阻塞队列,对其的操作必须是放和取交替完成的,每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue
6.LinkedBlockingQueue和ArrayBlockingQueue比较起来,它们背后所用的数据结构不一样,导致LinkedBlockingQueue的数据吞吐量要大于ArrayBlockingQueue,但在线程数量很大时其性能的可预见性低于ArrayBlockingQueue