[求助] 请问 ibatis read and write MySQL table 的同步方法_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
4
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1757 | 回复: 3   主题: [求助] 请问 ibatis read and write MySQL table 的同步方法        下一篇 
东西南北
注册用户
等级:少校
经验:1161
发帖:16
精华:0
注册:2015-10-10
状态:离线
发送短消息息给东西南北 加好友    发送短消息息给东西南北 发消息
发表于: IP:您无权察看 2016-2-1 9:50:01 | [全部帖] [楼主帖] 楼主

请问我用 ibatis读与写 MySQL 一个 table,但这个 table 别人可能会进去更新

 

method A 

读并进行判断,最后写入

 

method B

判断并更新

 

如果我要确保进入方法里时,资料内容不会读到一半被更新掉

是否最简单的方式,可以把两个 method 并成一个,并加上 synchronized,如下

 

public void synchronized methodC( int type ) {

 

if (type == A)

do A

else 

do B

}

 

这样是否能确保有人做 的话,这时也有别人要做 B,一定要等 做完才能进到这个 method C 





赞(0)    操作        顶端 
东西南北
注册用户
等级:少校
经验:1161
发帖:16
精华:0
注册:2015-10-10
状态:离线
发送短消息息给东西南北 加好友    发送短消息息给东西南北 发消息
发表于: IP:您无权察看 2016-2-2 9:24:46 | [全部帖] [楼主帖] 2  楼

翻 Head First 的章节

提到 lock 是针对 method 而非物件

所以在 method 加上 synchronized 后,进入方法时会对该物件上锁,下一执行绪必须等解锁才能进入

而如果是 static synchronized 方法,则会对 class 上锁,一样别人要进来,必须等上一个执行完毕

所以,理论上,这样是不会有 table data 不一致的问题,若有错误,还请高手指点一下,感谢。

我刚 submit 出去才跟我说已经贴过一次,若认为这是错误,请洽管理员,但按了也没反应… 
上一页,整个内容都不见了,又要重打… 以后 submit 之前要习惯按一下 ctrl+a, ctrl+c  




赞(0)    操作        顶端 
蜀山战纪
版主
等级:中校
经验:2051
发帖:38
精华:6
注册:2015-10-23
状态:离线
发送短消息息给蜀山战纪 加好友    发送短消息息给蜀山战纪 发消息
发表于: IP:您无权察看 2016-2-2 9:28:20 | [全部帖] [楼主帖] 3  楼

翻 Head First 的章节提到 lock 是针对 method 而非物件所以在 method 加上&n.....

你这样锁只有锁到java class, 没有锁到数据库的table,

 

要达到你的目的必需要同时锁到dbtable层级才行

 

而要这样锁要针对与数据库的连线下手

 

悲观锁定 乐观锁定啥的 查一下文件选个适当的来用吧 



QQ图片20160129113517.jpg


赞(0)    操作        顶端 
东西南北
注册用户
等级:少校
经验:1161
发帖:16
精华:0
注册:2015-10-10
状态:离线
发送短消息息给东西南北 加好友    发送短消息息给东西南北 发消息
发表于: IP:您无权察看 2016-2-2 9:32:40 | [全部帖] [楼主帖] 4  楼

引用2楼东西南北的回复翻 Head First 的章节提到 lock 是针对 method 而非物件所以在 metho.....

请问不是一样可以达到目的吗? 我不太在意做的漂不漂亮,最简单能做到效能也不差就好

我用同一个 method 传一个 type 进去控制

public static synchronized  void doService (OperationType type) {
  
    if (type = action1) 
        doAction1();  // 查询,新增
    else 
        doAction2();  // 查询,更新}

是因为新增时,需要判断原有的资料而置放位置,但更新又会更动原有的位置

所以用此方法,不是可以达到一定要新增完后,才能再进去查询,更新或一定要等到更新完后,才能再查询,新增吗? 




赞(0)    操作        顶端 
总帖数
4
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论