[求助] 请问 ibatis read and write MySQL table 的同步方法_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
4
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3059 | 回复: 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

}

 

这样是否能确保有人做 A 的话,这时也有别人要做 B,一定要等 A 做完才能进到这个 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,

 

要达到你的目的, 必需要同时锁到db的table层级才行

 

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

 

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



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
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论