
本教程操作环境:windows7系统、java10版,DELL G3电脑。
1.主要属性
1 2 3 4 5 6 7 8 9 10 | static final int NCPUS = Runtime.getRuntime().availableProcessors();
static final int maxTimedSpins = (NCPUS < 2) ? 0 : 32;
static final int maxUntimedSpins = maxTimedSpins * 16;
static final long spinForTimeoutThreshold = 1000L;
private transient volatile Transferer<E> transferer;
|
通过属性我们可以Get到两个点:
(1)这个阻塞队列里面是会自旋的;
(2)它使用了一个叫做transferer的东西来交换元素;
2.构造方法

1 2 3 4 5 6 | public SynchronousQueue() {
this ( false );
}
public SynchronousQueue(boolean fair) {
transferer = fair ? new TransferQueue<E>() : new TransferStack<E>();
}
|
(1)默认使用非公平模式,也就是栈结构;
(2)公平模式使用队列,非公平模式使用栈;
3.TransferQueue
TransferQueue是SynchronousQueue的公平策略实现类,它在内部维护了一个线程队列。
1 2 3 4 | public SynchronousQueue(boolean fair) {
transferer = fair ? new TransferQueue<E>() : new TransferStack<E>();
}
|
以上就是java中SynchronousQueue的原理,相信大家现在已经能够理解SynchronousQueue的队列长度为0和公平模式的应用的情况了,而TransferQueue是实现公平模式的要点。