论坛首页 Java企业应用论坛

请教:事务与同步的问题

浏览 11149 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-01-21  
引用
可以强迫更新完毕才推出同步方法,这个就足以保证唯一记录。


按你的说法,该怎么个强迫法呢?在commit后面print一个“明确的提示”就是了吗?

我倒觉得JDBCDrvier在commit动作的时候,不大可能new一个thread去实际提交事务,而主线程先行return,这样的行为太不负责任,而事务是非常严谨的。我比较赞同风舞凰扬的说法,flyfish误用synchronized的机会更大些。
0 请登录后投票
   发表时间:2005-01-21  
关键字: 最大值,增加记录
最大值是增加记录的前提条件
也就是说 为了保证『获取最大值 & +1,增加记录』是一个原子操作,必须在其前面加锁

   A锁锁定{
          读取最大值
       +1
          增加新记录
   }
    这里的最大值就是一个全局的共享资源,只有在被锁A保护的情况下才能保证整个操作序列的正确性。

建议使用对象锁来完成该功能。
0 请登录后投票
   发表时间:2005-01-23  
general 写道
只有用sequence是最优的

不明白为什么会这么写?没好处,速度还慢,还有问题...

sequence速度是可以保证,但是不是万能的,难道序列能包含特定规则吗?你能给客户提供一堆没有规则的序号看吗?唉。。。。。
一千个并发用户,也没有发现瓶颈阿?
0 请登录后投票
   发表时间:2005-01-23  
凤舞凰扬 说的好像缺那么一环,我还没找到证据来,等着我。。。。呵呵
0 请登录后投票
   发表时间:2005-01-23  
firebody 写道
人家说过service不是singleton嘛 ? 我怎么没看到?
对于楼主的同步问题,我假设如果在singleton的情况下,method可以保证同一时刻只有一个线程在执行这个method,但是他的代码丝毫没有明确的提示保证数据库得到更新,并且更新完毕才推出method。 在Hibernate中可以通过session.flush()来执行sql,如果没有这一句就等于白做了同步。至于jdbc driver的延迟执行问题,我觉得这个可能性更大,是否因为缓冲引起? 可以强迫更新完毕才推出同步方法,这个就足以保证唯一记录。

      哈哈,这话说得倒是实在,用单实例来控制线程的访问当然可以保证唯一,不过这样后,就带来更多的问题了(我不像就singleton再作任何评论,朋友可以看看论坛上这方面的帖子)。如果为了解决一个非常简单的问题,要用比较不好的解决方案,如果只是纯粹为了反驳我,呵呵,没有太多意义可言,不是么?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics