本教程操作环境:windows7系统、java10版,DELL G3电脑。
1.主要属性
//CPU的数量 staticfinalintNCPUS=Runtime.getRuntime().availableProcessors(); //有超时的情况自旋多少次,当CPU数量小于2的时候不自旋 staticfinalintmaxTimedSpins=(NCPUS<2)?0:32; //没有超时的情况自旋多少次 staticfinalintmaxUntimedSpins=maxTimedSpins*16; //针对有超时的情况,自旋了多少次后,如果剩余时间大于1000纳秒就使用带时间的LockSupport.parkNanos()这个方法 staticfinallongspinForTimeoutThreshold=1000L; //传输器,即两个线程交换元素使用的东西 privatetransientvolatileTransferer<E>transferer;
通过属性我们可以Get到两个点:
(1)这个阻塞队列里面是会自旋的;
(2)它使用了一个叫做transferer的东西来交换元素;
2.构造方法
publicSynchronousQueue(){ this(false); } publicSynchronousQueue(booleanfair){ transferer=fair?newTransferQueue<E>():newTransferStack<E>(); }
(1)默认使用非公平模式,也就是栈结构;
(2)公平模式使用队列,非公平模式使用栈;
3.TransferQueue
TransferQueue是SynchronousQueue的公平策略实现类,它在内部维护了一个线程队列。
publicSynchronousQueue(booleanfair){ //如果是公平模式就使用队列,如果是非公平模式就使用栈 transferer=fair?newTransferQueue<E>():newTransferStack<E>(); }
原文来自:https://www.py.cn
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容