• 技术文章 >java >java基础

    java中SynchronousQueue的原理

    小妮浅浅小妮浅浅2021-02-08 19:26:04原创2256

    本教程操作环境:windows7系统、java10版,DELL G3电脑。

    1.主要属性

    // CPU的数量
    static final int NCPUS = Runtime.getRuntime().availableProcessors();
    // 有超时的情况自旋多少次,当CPU数量小于2的时候不自旋
    static final int maxTimedSpins = (NCPUS < 2) ? 0 : 32;
    // 没有超时的情况自旋多少次
    static final int maxUntimedSpins = maxTimedSpins * 16;
    // 针对有超时的情况,自旋了多少次后,如果剩余时间大于1000纳秒就使用带时间的LockSupport.parkNanos()这个方法
    static final long spinForTimeoutThreshold = 1000L;
    // 传输器,即两个线程交换元素使用的东西
    private transient volatile Transferer<E> transferer;

    通过属性我们可以Get到两个点:

    1)这个阻塞队列里面是会自旋的;

    2)它使用了一个叫做transferer的东西来交换元素;

    2.构造方法

    public SynchronousQueue() {
    this(false);
    }
    public SynchronousQueue(boolean fair) {
    transferer = fair ? new TransferQueue<E>() : new TransferStack<E>();
    }

    1)默认使用非公平模式,也就是栈结构;

    2)公平模式使用队列,非公平模式使用栈;

    3.TransferQueue

    TransferQueue是SynchronousQueue的公平策略实现类,它在内部维护了一个线程队列。

    public SynchronousQueue(boolean fair) {
        // 如果是公平模式就使用队列,如果是非公平模式就使用栈
        transferer = fair ? new TransferQueue<E>() : new TransferStack<E>();
    }

    以上就是java中SynchronousQueue的原理,相信大家现在已经能够理解SynchronousQueue的队列长度为0和公平模式的应用的情况了,而TransferQueue是实现公平模式的要点。

    专题推荐:java synchronousqueue原理
    上一篇:java中SynchronousQueue是什么意思 下一篇:SynchronousQueue在java中的元素增减

    相关文章推荐

    • java中SynchronousQueue是什么意思

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网