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 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器