代码之家  ›  专栏  ›  技术社区  ›  Hind Forsum

为什么Java传输队列不能在“Pd()”之后“传递()”?

  •  1
  • Hind Forsum  · 技术社区  · 6 年前

    我有一个非常简单的代码片段:

    public static void main(String [] args) throws InterruptedException {
        TransferQueue<Integer> transferQueue = new LinkedTransferQueue<>();
        System.out.println("Step1");
        transferQueue.put(2);
        System.out.println("Step2");
        transferQueue.transfer(2);
        System.out.println("Step3");
    }
    

    运行此程序,它将打印:

    Step1
    Step2
    

    然后挂在那里。为什么“transfer()”函数不起作用?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Stephen C    6 年前

    这是由 javadoc 对于 transfer(e) 方法。

    更准确地说,如果存在等待接收指定元素的使用者(在 take() 或定时轮询),否则将在该队列的尾部插入指定的元素 等待直到消费者收到元素 .

    强调添加!

    在您的示例中,没有消费者可以接收元素,因此 transfer(2) 永远阻止通话。

    (这与前面无关 put(2) 打电话)

    推荐文章