gpt4 book ai didi

multithreading - 在顺序执行的线程中使用ArrayBuffer?

转载 作者:行者123 更新时间:2023-12-04 21:52:12 26 4
gpt4 key购买 nike

我有两个Future s,第二个在第一个结束后开始。两者都写入相同的 ArrayBuffer实例,但由于它们是串行执行的(不是同时执行),我认为它们不是同时执行的。

但是,我知道有 @volatile两个或多个线程之间共享的变量的注释( @volatile 禁用缓存)。

自从第一个线程完成后,在 ArrayBuffer 内例如,可能存在一些缓存,导致第二个线程无法看到 ArrayBuffer真实状态:不确定使用是否安全ArrayBuffer这边走。

在我的情况下缓存是否真的可能是一个问题,如果是这种情况:是否有推荐的方法来制作 ArrayBuffer使用@volatile内部?

最佳答案

如果(当且仅当)你将它[数组]传播到 future ,应该没问题:

val futureA = Future {
val buf = ArrayBuffer(…)
update(buf)
buf
}

val futureB = futureA map {
buf => moreUpdates(buf); buf
}

futureB foreach println // print the result of the transformations

从内存安全的角度来看,这是可以的,因为 futureA happens-before 的完成调用 onComplete(实际上 Future 上的所有转换都是在 onComplete 之上实现的)回调。在本例中 map

关于multithreading - 在顺序执行的线程中使用ArrayBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36529657/

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