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

多个Timer任务 怎么同事访问同一个static 类中的属性

RT 

  就是 我多个Timer任务 左右操作都是在一个staitc 类中 ,比如所有的计数 都是在另一个基础上去累计.

------解决方案--------------------
方法1:
假设被同步的对象名为resource, 那么把对象的obj的所有需同步的方法(比如resource.synAccess())前加上synchronized
接下来把resource声明成static对象,所有的TimerTask在访问resource时调用resource.synAccess()方法时就是同步的.
方法2:
假设resource在Owner类中被声明为static方法,而resource又无法象方法1那样修改的话,就把所有方问resource的方法在Owner中声明为static的, 比如Owner.synAccessResource()方法. 所有TimerTask在访问resource时调用Owner.synAccessResource()方法时就是同步的.

------解决方案--------------------
Ding...
synchronized(lock)
注意同步
探讨
上面第2个方法不准确,补充一个:
方法3:
假设resource在Owner类中被声明为static,而resource又无法象方法1那样修改的话TimeTask访问resource的地方使用
synchronized(resource){ ... } 应该就行了.(前提是resource不能是基本型),如果resource是基本型,就需要再声明一个非基本型的static对象如: static Object lock=new Object(); 再synchronized(lock){ ...对resource操作 }