我有一个非常简单的代码段:
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()”函数不起作用?
最佳答案
transfer(e)
方法的javadoc对此进行了解释。
更准确地说,如果存在已经在等待接收它的使用者(在take()
或定时轮询中),则立即传输指定的元素,否则将指定的元素插入此队列的末尾,并等待直到使用者接收到该元素。
重点补充!
在您的示例中,没有使用者可以接收该元素,因此transfer(2)
调用将永远阻塞。
(这与前面的put(2)
调用无关。)