gpt4 book ai didi

java - 在线程之间传递对象

转载 作者:行者123 更新时间:2023-11-30 03:35:27 25 4
gpt4 key购买 nike

我有工作线程来生成对象并将它们推送到线程安全的Set中。处理线程定期读取 Set 并处理元素。

虽然可以从集合中成功检索对象引用本身,但如果从处理线程访问,则对象的变量不是线程安全的。除了使所有对象的内部 volatile 等之外,是否有某种模式可以做到这一点?将来对象可能会变得更加复杂,包含嵌套对象等。

假设一旦放入Set中,就不会再对任何对象进行外部修改,是否有某种方法可以在我之前“发生在”当前Set中的任何内容之前开始处理吗?处理线程已经在运行,并且只有在填充Set后才会不会创建。

对象本身只是数据容器,没有固有的线程安全性。我无法将所有字段设为最终字段,因为它们在放入 Set 之前可能会被修改多次。

最佳答案

如果你有一个线程安全集,这将在写入之前发生,因此你不必担心该对象是否是线程安全的。这假设您的生产者在将对象放入集合后不会更改或读取该对象。

如果使对象不可变,这将使关系更清晰,但是我假设一旦将对象传递到共享存储,写入线程就不再更改对象,只有使用线程读取或更改对象.

顺便说一句,我会使用 ExecutorService 通过队列传递任务,因为它更高效并且是为您编写的。

关于java - 在线程之间传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28043117/

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