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

tang3dashu 2008-11-18 11:57:01

RT

就是 我多个Timer任务 左右操作都是在一个staitc 类中 ,比如所有的计数 都是在另一个基础上去累计.
...全文
162 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tang3dashu 2008-11-26
  • 打赏
  • 举报
回复
呵呵 不能这么做啊。
我这里数据的并发量很大 有可能一秒种就有好几笔数据需要添加(本身这个功能就是用线程池做的).所有选择同步不是最有效的办法
showde123 2008-11-21
  • 打赏
  • 举报
回复
김래원
chen_chirs 2008-11-21
  • 打赏
  • 举报
回复
Ding...
synchronized(lock)
注意同步
[Quote=引用 2 楼 Iangao 的回复:]
上面第2个方法不准确,补充一个:
方法3:
假设resource在Owner类中被声明为static,而resource又无法象方法1那样修改的话TimeTask访问resource的地方使用
synchronized(resource){ ... } 应该就行了.(前提是resource不能是基本型),如果resource是基本型,就需要再声明一个非基本型的static对象如: static Object lock=new Object(); 再synchronized(lock){ ...对resource操作 }
[/Quote]
Iangao 2008-11-19
  • 打赏
  • 举报
回复
方法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()方法时就是同步的.
macleane 2008-11-19
  • 打赏
  • 举报
回复
注意同步,如果是要操作的是基本类型,加volatile关键字,如果是对象,尽量选用线程安全的,不行就把操作放在带有synchronized关键字的方法中
Iangao 2008-11-19
  • 打赏
  • 举报
回复
上面第2个方法不准确,补充一个:
方法3:
假设resource在Owner类中被声明为static,而resource又无法象方法1那样修改的话TimeTask访问resource的地方使用
synchronized(resource){ ... } 应该就行了.(前提是resource不能是基本型),如果resource是基本型,就需要再声明一个非基本型的static对象如: static Object lock=new Object(); 再synchronized(lock){ ...对resource操作 }

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧