Java 中 BlockingQueue 上的并发 put 调用

发布于 2024-11-26 12:46:57 字数 218 浏览 0 评论 0原文

我知道并发添加到 c++ 中的 stl 队列可能会导致问题,解决此问题的方法是在所有添加/删除调用周围添加互斥锁。

但我现在正在用 Java 编程,并且正在使用 BlockingQueue。文档只说对 BlockingQueue 对象调用 put/take 的线程会被隐式阻塞,直到有空间可以放置/有东西可以分别取出。但是,它没有提及任何有关并发 put/take 调用的信息。我需要用互斥锁来保护它们吗?

I know that concurrent adds to an stl queue in c++ can cause issues, and the way to solve this is adding a mutex lock around all add/remove calls.

But I am programming in Java at the moment, and I'm using BlockingQueue. The documentation only says that the thread that calls put/take on a BlockingQueue object gets blocked implicitly until there's room to put/there's something to take respectively. However, it does not mention anything about concurrent put/take calls. Would I need to protect these with a mutex lock?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

影子的影子 2024-12-03 12:46:57

不,阻塞队列是线程安全的。来自文档

BlockingQueue 实现是线程安全的。所有排队方法都使用内部锁或其他形式的并发控制以原子方式实现其效果

No, blocking-queues are thread-safe. From the docs:

BlockingQueue implementations are thread-safe. All queuing methods achieve their effects atomically using internal locks or other forms of concurrency control

断爱 2024-12-03 12:46:57

来自文档

BlockingQueue 实现是线程安全的。

因此,您不需要锁。

From the documentation:

BlockingQueue implementations are thread-safe.

Therefore, you don't need a lock.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文