繁体   English   中英

如何安全地将可变对象从一个线程发布到另一个线程

[英]How to safely publish mutable object from one thread to another

例如,我有一个不同步的可变类Foo(或ArrayList)。 这种对象的构造需要时间,所以我想在一个单独的线程中执行它。

如果我将计算结果存储在某个地方,然后再从另一个线程访问它,那将不是线程安全的,因为需要同步或易变,对吗? (实际上我不太确定)

因此,我正在寻找一种在不同步Foo的情况下将此类对象从一个线程传递到另一个线程的方法。

您的要求符合生产者消费者模式 Java的并发包a提供了线程安全的集合(如BlockingQueue等)。 生产者将创建对象并将其放在BlockingQueue 然后,消费者拿起对象。 这是示例实现

首先想知道这是否可以解决,您可以通过创建Future并稍后在同一执行线程中获得结果来解决。 这将使一切变得非常容易。

你也可以使用的AtomicReference的是,看看这个答案: 当在Java中使用的AtomicReference?

也请看这里: Java并发性:CAS与锁定

也就是说,并发编程很难正确处理。 因此,我建议您使其尽可能简单,使用Java提供的标准方法,在通用锁上进行synchronize 如果您发现这是瓶颈,那么以后总是可以使用其他更复杂的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM