gpt4 book ai didi

java - 每个使用字段的方法中的同步块(synchronized block)

转载 作者:行者123 更新时间:2023-11-29 03:38:58 25 4
gpt4 key购买 nike

这似乎是一个非常常见的问题,但我没有找到。假设我有这段代码:

public class MyClass {
private AnotherClass mField;

public void changeOne(AnotherClass newOne) {
// <...> lines of code here
synchronized (mField) {
mField = newOne;
}
// <...> lines of code here

}

public void changeTwo(AnotherClass newTwo) {
// <...> lines of code here
mField = newTwo;
// <...> lines of code here
}
}

假设 changeOne()changeTwo() 是从不同的线程调用的。在 changeOne() 中有一个同步块(synchronized block)是否足以保护 mField 不被 changeTwo() 更改?或者我需要明确地将 mField 更改为 synchronized block 的每个地方包装起来? (请留下同步方法和其他方法)。

最佳答案

您需要使用同步块(synchronized block)(或)同步方法显式同步对 mField 的所有修改。否则,不止一个线程可以通过一次执行 changeTwo 来更改 mField

编辑:正如 Tedd Hopp 所建议的,如果变量不是易变的,读取也需要同步和锁定,你得到的应该在同一个对象上。

关于java - 每个使用字段的方法中的同步块(synchronized block),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14065381/

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