如何从 'endless waiting' 停止方法 put() 和 take()?

How to stop methods put() and take() from 'endless waiting'?

BlockingQueue 实现中,我们知道方法 put()take() 具有阻塞性质。

对于解决他们无休止的等待状态,您有什么建议?例如,如果没有更多项目可读并且调用 take() 怎么办。我的程序将永远 运行。你会如何解决这个问题?有什么建议吗?

使用 BLockingQueueoffer 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 以帮助进行正确的空值检查。