为什么java TransferQueue不能;传输();“之后”;put();?
我有一个非常简单的代码片段:为什么java TransferQueue不能;传输();“之后”;put();?,java,concurrency,queue,freeze,transfer,Java,Concurrency,Queue,Freeze,Transfer,我有一个非常简单的代码片段: public static void main(String [] args) throws InterruptedException { TransferQueue<Integer> transferQueue = new LinkedTransferQueue<>(); System.out.println("Step1"); transferQueue.put(2); System.out.println
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");
}
然后挂在那里。那么为什么“transfer()”函数不起作用呢?这是由transfer(e)
方法的
更准确地说,如果存在已在等待接收指定元素的使用者(在take()
或定时轮询中),则立即传输指定元素,否则将在该队列的尾部插入指定元素,并等待该元素被使用者接收
重点补充
在您的示例中,没有消费者接收元素,因此transfer(2)
调用将永远阻塞
(这与前面的put(2)
调用无关。)
Step1
Step2