gpt4 book ai didi

java - Java中如何处理数组同步

转载 作者:行者123 更新时间:2023-12-01 21:43:27 25 4
gpt4 key购买 nike

我有一个带有整数数组的对象,以及一个可以修改它的方法,仅锁定数组的一个元素:

public void setArray(Integer position, int num) {
synchronized (myarray[position]) {
myarray[position] = num;
}
}

然后我想计算数组的平均值,但要做到这一点,我需要“锁定”整个对象,并确保其他线程没有执行 setInteger 方法,直到我的calculateAverage 完成。我怎样才能做到这一点?

如果我写: 同步(MyObject){...}它不起作用,因为我锁定了不同的东西......

最佳答案

您当前的方法不起作用;您没有锁定 myarray 而是锁定从中引用的 Integer 对象;另一个线程可能会看到无序的更新,或者一段时间内看不到更新,或者根本看不到更新。

有一个更好的解决方案 - 将 myarray 声明为 AtomicIntegerArray myarray;。更新至AtomicIntegerArray始终正确同步;保证其他线程立即以正确的顺序看到它们。

如果您能够以一种不更新数组相同元素的方式在线程之间分配工作,那就更好(更高效) - 线程同步总是会产生一些成本。

关于java - Java中如何处理数组同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58784811/

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