Java 如何安全地将可变对象从一个线程发布到另一个线程
例如,我有一个没有同步的可变类Foo(例如ArrayList)。 构建这样一个对象需要时间,所以我想在单独的线程中执行它 如果我将计算结果存储在某个地方,然后从另一个线程访问它,这将不是线程安全的,因为需要同步或volatile,对吗?(这里我其实不太清楚)Java 如何安全地将可变对象从一个线程发布到另一个线程,java,concurrency,Java,Concurrency,例如,我有一个没有同步的可变类Foo(例如ArrayList)。 构建这样一个对象需要时间,所以我想在单独的线程中执行它 如果我将计算结果存储在某个地方,然后从另一个线程访问它,这将不是线程安全的,因为需要同步或volatile,对吗?(这里我其实不太清楚) 因此,我正在寻找一种方法,将这样一个对象从一个线程传递到另一个线程,而无需同步Foo。您的要求与。Java的并发包a提供线程安全的集合(如BlockingQueue等)。生产者将创建对象并将其置于阻塞队列。消费者然后拿起物品。这是 首先想知
因此,我正在寻找一种方法,将这样一个对象从一个线程传递到另一个线程,而无需同步Foo。您的要求与。Java的并发包a提供线程安全的集合(如
BlockingQueue
等)。生产者将创建对象并将其置于阻塞队列
。消费者然后拿起物品。这是 首先想知道,通过创建未来并稍后在同一执行线程中获得结果,您是否可以解决这一问题。这将使一切变得非常简单。您也可以使用a来实现这一点,请查看以下答案:
请看这里:
也就是说,并发编程很难正确。因此,我建议您尽可能简单,使用java提供的标准方式,
对公共锁进行同步。如果你注意到这是一个瓶颈,那么你以后总是可以使用另一种更复杂的方法。我不是100%确定我理解你的要求,但也许a会起作用。@Dukeling你肯定弄错了。我会尽力澄清我的问题。