简单的setter和getter需不需要synchronized
一直对synchronized和锁的理解不太好,在网上看了很多资料,还是没有解决疑惑. 请教大家:
1. 简单的setter和getter方法需不需要加锁?
class Abc {
private String name;
public synchronized String getName() { return name;}
public synchronized void setName(String name) { this.name = name;}
}
我始终不太明白,这两个synchronized在这里有什么好处.我只看到一篇文章上说,如果不加,"会引起数据混乱".可是为什么会混乱?我觉得"return name"和"this.name=name"这两个操作本身就是原子的(?),加不加synchronized应该都一样啊.
2. 在上一个例子中,在该类内部访问name属性时,是直接访问,还是通过getter和setter访问?
class Abc {
private String name;
public synchronized String getName() { return name;}
public synchronized void setName(String name) { this.name = name;}
private void m1() {
if(name.equals("sdf")) { name = "123";}
if(getName().equals("sdf")) { setName("123");}
}
}
如果getName()与setName()加了synchronized的,是不是内部都应该使用getter/setter来访问name?否则getName()/setName()的synchronized加了就没有什么用了