如何从 'endless waiting' 停止方法 put() 和 take()?
How to stop methods put() and take() from 'endless waiting'?
在 BlockingQueue
实现中,我们知道方法 put()
和 take()
具有阻塞性质。
对于解决他们无休止的等待状态,您有什么建议?例如,如果没有更多项目可读并且调用 take()
怎么办。我的程序将永远 运行。你会如何解决这个问题?有什么建议吗?
使用 BLockingQueue
的 offer
and poll
方法。它们允许您为这两个操作指定超时。
// returns false if it could not push after 1 second
blockingQueue.offer(5, 1, TimeUnit.SECONDS);
/// returns null if no item was received after 1 second
blockingQueue.poll(1, TimeUnit.SECONDS);
如果您不想超时,您可以使用重载方法,这些方法将 return 立即具有相同的 return 行为 (offer
poll
)
// returns false if it could not push
blockingQueue.offer(5);
/// returns null if no item was received
blockingQueue.poll();
注意检查 poll
的 return 是否为空。根据项目的结构,您可能需要查看 java Optional
以帮助进行正确的空值检查。
在 BlockingQueue
实现中,我们知道方法 put()
和 take()
具有阻塞性质。
对于解决他们无休止的等待状态,您有什么建议?例如,如果没有更多项目可读并且调用 take()
怎么办。我的程序将永远 运行。你会如何解决这个问题?有什么建议吗?
使用 BLockingQueue
的 offer
and poll
方法。它们允许您为这两个操作指定超时。
// returns false if it could not push after 1 second
blockingQueue.offer(5, 1, TimeUnit.SECONDS);
/// returns null if no item was received after 1 second
blockingQueue.poll(1, TimeUnit.SECONDS);
如果您不想超时,您可以使用重载方法,这些方法将 return 立即具有相同的 return 行为 (offer
poll
)
// returns false if it could not push
blockingQueue.offer(5);
/// returns null if no item was received
blockingQueue.poll();
注意检查 poll
的 return 是否为空。根据项目的结构,您可能需要查看 java Optional
以帮助进行正确的空值检查。