我试图理解涉及对象同步的代码部分,并且其中一个同步块(synchronized block)更改了对象的某些字段。我正在查看的代码类似于以下内容:
public class ClassA {
private ClassB someObject = new ClassB();
public void FuncA() {
synchronized(someObject) {
//change some field of someObject
}
}
public void FuncB() {
synchronized(someObject) {
//change some field of someObject
}
}
}
这是一种安全的做法吗?我在网上阅读了一些描述锁安全实践的页面,但似乎没有一个涉及类似的示例。
感谢任何帮助。谢谢!
最佳答案
是的,没问题。
例如,这基本上就是您在从多个线程写入 ArrayList 时可以执行的操作:在列表上同步,并更新其字段(内部数组、大小等)。需要注意的是,您不得在任何地方以非同步方式访问 someObject
。
public class ClassA {
private ClassB someObject = new ClassB();
public void FuncA() {
synchronized(someObject) {
//change some field of someObject
}
}
// ...
// BAD! Don't do this.
public void FuncC() {
// read some field of someObject
}
}
关于java - 同步对象并更改其字段之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52271579/