Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 BlockingQueue上是否有最大阻塞时间_Java_Multithreading_Producer Consumer - Fatal编程技术网

Java BlockingQueue上是否有最大阻塞时间

Java BlockingQueue上是否有最大阻塞时间,java,multithreading,producer-consumer,Java,Multithreading,Producer Consumer,在生产者-消费者问题中,我想使用LinkedBlockingQueue作为共享缓冲区 生产者线程使用put()方法将元素放入队列,消费者线程使用take()方法将元素放入队列 我的问题是:假设队列为空,并且使用者线程调用take()方法,我知道在生产者将元素放入队列之前,线程被阻塞。但是是否有一个最大的阻塞持续时间?在调用put()之前,我是否可以安全地假定使用者线程将被阻塞 我曾听人说,世上再也没有比布洛克更好的了。这是真的吗?不,take()方法中没有等待超时。并且没有提到任何超时: 检索并

在生产者-消费者问题中,我想使用
LinkedBlockingQueue
作为共享缓冲区

生产者线程使用
put()
方法将元素放入队列,消费者线程使用
take()
方法将元素放入队列

我的问题是:假设队列为空,并且使用者线程调用
take()
方法,我知道在生产者将元素放入队列之前,线程被阻塞。但是是否有一个最大的阻塞持续时间?在调用
put()
之前,我是否可以安全地假定使用者线程将被阻塞


我曾听人说,世上再也没有比布洛克更好的了。这是真的吗?

不,
take()
方法中没有等待超时。并且没有提到任何超时:

检索并删除此队列的头,如有必要,等待,直到元素可用


另一方面,该方法可以将超时作为参数。

如果您查看LinkedBlockingQueue take()方法的实现 它在循环中等待notEmpty条件,只有当count变为非零时才会退出循环

是的,它将永远等待,直到条件得到满足,这意味着有人在那里放置了一个元素