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变为非零时才会退出循环 是的,它将永远等待,直到条件得到满足,这意味着有人在那里放置了一个元素