日期:2014-05-20  浏览次数:20688 次

这个同步写法对吗?
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都要同步,否则虽保证了数据的可见性,但不能保证数据的一致性,会有脏数据产生