Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么java TransferQueue不能;传输();“之后”;put();?_Java_Concurrency_Queue_Freeze_Transfer - Fatal编程技术网

为什么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