Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何安全地将可变对象从一个线程发布到另一个线程_Java_Concurrency - Fatal编程技术网

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

Java 如何安全地将可变对象从一个线程发布到另一个线程,java,concurrency,Java,Concurrency,例如,我有一个没有同步的可变类Foo(例如ArrayList)。 构建这样一个对象需要时间,所以我想在单独的线程中执行它 如果我将计算结果存储在某个地方,然后从另一个线程访问它,这将不是线程安全的,因为需要同步或volatile,对吗?(这里我其实不太清楚) 因此,我正在寻找一种方法,将这样一个对象从一个线程传递到另一个线程,而无需同步Foo。您的要求与。Java的并发包a提供线程安全的集合(如BlockingQueue等)。生产者将创建对象并将其置于阻塞队列。消费者然后拿起物品。这是 首先想知

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

如果我将计算结果存储在某个地方,然后从另一个线程访问它,这将不是线程安全的,因为需要同步或volatile,对吗?(这里我其实不太清楚)


因此,我正在寻找一种方法,将这样一个对象从一个线程传递到另一个线程,而无需同步Foo。

您的要求与。Java的并发包a提供线程安全的集合(如
BlockingQueue
等)。生产者将创建对象并将其置于
阻塞队列
。消费者然后拿起物品。这是

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

您也可以使用a来实现这一点,请查看以下答案:

请看这里:


也就是说,并发编程很难正确。因此,我建议您尽可能简单,使用java提供的标准方式,
对公共锁进行同步。如果你注意到这是一个瓶颈,那么你以后总是可以使用另一种更复杂的方法。

我不是100%确定我理解你的要求,但也许a会起作用。@Dukeling你肯定弄错了。我会尽力澄清我的问题。