gpt4 book ai didi

java - BlockingQueue 对于所有线程来说始终都是一样的吗?

转载 作者:行者123 更新时间:2023-12-01 23:16:35 27 4
gpt4 key购买 nike

我正在实现一个程序,其中主线程将各种消息推送到工作线程,而工作线程将工作结果推送回主线程。

为此,我计划使用两个队列,一个用于推送到工作线程,另一个用于从中拉出。

据我了解,线程会缓存对象,因此如果它们要add()将一个对象添加到另一个线程可以poll()的队列中,则此更改可能不会立即可见,即它可能不会同步。这是正确的吗?

但是,如果我要使用 BlockingQueue,则该队列上的所有操作都应该立即对所有线程可见?

最佳答案

这个答案假设您正在谈论线程安全的数据结构或构造。如果您使用常规的非线程安全字段,则不能保证它会起作用,但也不能保证它不会起作用。注意:这是对线程安全有用的单元测试,但并非万无一失。

this change might not be visible immediately, i.e. it might not be synchronized. Is this correct?

是的。延迟通常约为 50 - 100 纳秒,因此可能几乎是立即的。

all operations on this queue are supposed to be immediately visible to all threads?

这在真机中是不可能的。你可以说的是,你永远不应该因为可见性问题而出现错误,大多数情况下是非常轻微的延迟。 (但是,由于它会产生垃圾,因此在最坏的情况下,如果机器没有 hibernate ,则可能会出现 Full GC 延迟,在这种情况下,延迟可能是数小时或数天)

关于java - BlockingQueue 对于所有线程来说始终都是一样的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21110803/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com