Java 内部的消息队列主要有以下几种:
| 队列 | 有界性 | 锁 | 结构 | 队列类型 |
|---|---|---|---|---|
| ArrayBlockingQueue | 有界 | 加锁 | 数组 | 阻塞 |
| LinkedBlockingQueue | 可选 | 加锁 | 链表 | 阻塞 |
| ConcurrentLinkedQueue | 无界 | 无锁 | 链表 | 非阻塞 |
| LinkedTransferQueue | 无界 | 无锁 | 链表 | 阻塞 |
| PriorityBlockingQueue | 无界 | 加锁 | 堆 | 阻塞 |
| DelayQueue | 无界 | 加锁 | 堆 | 阻塞 |
通常情况下为防止生产者速度过快导致内存溢出,只能选择有界队列;为了减少垃圾回收对系统性能的影响,会尽量选择 Array/Heap 格式的数据结构,因此符合条件的队列就只有 ArrayBlockingQueue,但其底层使用加锁的方式进行处理,在高并发环境下效率低下,Disruptor 因此应运而生
Disruptor 类似 ArrayBlockingQueue,是一个高性能的线程间异步通信的队列框架( 即在同一个JVM进程中的多线程间消息传递 )一般用于线程间消息的传递。官方宣称基于Disruptor开发的系统单线程能支撑每秒600万订单
