hhlux 2008-11-18 14:28 采纳率: 100%
浏览 193
已采纳

关于程序互相调用

标题描述得不是特别清楚。一个很菜鸟的问题,实际情况是这样,项目是一个STRUTS2的WEB应用程序,ACTION里有个方法,先从一张表里读取一个CODE,再把这个CODE作为主键插入另外一张表,也就是说,两个DB操作。

问题是这样,如果两台机器的两个用户同时调用这个方法,有可能会出现这种情况:两个人取得的CODE都是一样的,然后两个人用相同的CODE插DB,DB就报错了。

我的疑问是,读CODE和插DB是在一个方法里的两个DB操作,执行速度应该是很快的,为什么会出现上述这种情况呢?这种情况跟线程,进程什么的有关系吗?
[b]问题补充:[/b]
标题描述得不是特别清楚。一个很菜鸟的问题,实际情况是这样,项目是一个STRUTS2的WEB应用程序,ACTION里有个方法,先从一张表里读取一个CODE,再把这个CODE作为主键插入另外一张表,也就是说,两个DB操作。

问题是这样,如果两台机器的两个用户同时调用这个方法,有可能会出现这种情况:两个人取得的CODE都是一样的,然后两个人用相同的CODE插DB,DB就报错了。

我的疑问是,读CODE和插DB是在一个方法里的两个DB操作,执行速度应该是很快的,为什么会出现上述这种情况呢?这种情况跟线程,进程什么的有关系吗?

看了bohemia的回答,里面有syncronized关键字,JAVA里syncronized是用于同步线程的,这里用syncronized是不是意味着STRUTS2的请求都是基于线程的?

或者是说,关于STRUTS2的请求是线程还是进程呢?

不知道有没有问到点上呢。
[b]问题补充:[/b]
非常高兴的感谢bohemia的回答,解决了我心中的疑惑。还想再问一下,

1.你说的线程控制是不是就是指用syncronized ?

2.如果是并列服务器,syncronized就不起作用了?

  • 写回答

4条回答 默认 最新

  • bohemia 2008-11-18 15:05
    关注

    [quote]1.你说的线程控制是不是就是指用syncronized ? [/quote]
    是的.同一个应用内,可以用线程控制并发;

    [quote]2.如果是并列服务器,syncronized就不起作用了? [/quote]
    如果是并列服务器,这个控制可能会有问题的;
    需要数据库端做处理,或者采用统一入口,或者找其他办法了.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c