例如,我有一个没有同步的可变类 Foo(或 ArrayList 例如)。构建这样一个对象需要时间,所以我想在一个单独的线程中执行它。
如果我将计算结果存储在某个地方,然后从另一个线程访问它,那将不是线程安全的,因为需要同步或易失性,对吗?(我实际上不太确定这里)
所以我正在寻找一种方法来将这样的对象从一个线程传递到另一个线程,而无需同步 Foo。
例如,我有一个没有同步的可变类 Foo(或 ArrayList 例如)。构建这样一个对象需要时间,所以我想在一个单独的线程中执行它。
如果我将计算结果存储在某个地方,然后从另一个线程访问它,那将不是线程安全的,因为需要同步或易失性,对吗?(我实际上不太确定这里)
所以我正在寻找一种方法来将这样的对象从一个线程传递到另一个线程,而无需同步 Foo。
您的要求符合Producer Consumer Pattern。Java 的并发包 a 提供线程安全的集合(如BlockingQueue
等)。生产者将创建对象并将其放在BlockingQueue
. 消费者然后拿起对象。这是示例实现。
首先想知道这是否不是您可以通过创建 Future 并稍后在同一执行线程中获取结果来解决的问题。这将使一切变得非常容易。
您也可以为此使用AtomicReference,看看这个答案:When to use AtomicReference in Java?
也看看这里:Java并发:CAS与锁定
也就是说,并发编程很难纠正。所以我建议你尽可能简单,使用java提供的标准synchronize
方式,在一个普通的锁上。如果您注意到这是瓶颈,您以后可以随时使用另一种更复杂的方法。