这个同步写法对吗?
Java code
//这是公享的类
public class Resource{
}
线程Thread里,含有Resource的引用obj,方法change会改变Resouce的状态
Java code
public void change(){
synchronized(obj){
....
}
}
这样写对吗?同步块不要非写在共享的Resouce里吧。
------解决方案--------------------
你使用的是obj这个对象的锁来同步Resouce,是没有问题的
前提是,如果对Resouce状态的更改本身是原子性的,那么只要同步modify、write Resouce状态即可,这样就可以保证写数据对其他线程的可见性
如果对Resouce状态的更改不是原子性的,尤其是形如check-modify-write的操作,对read、modify、write都要同步,否则虽保证了数据的可见性,但不能保证数据的一致性,会有脏数据产生