线程安全和表单提交的疑问
现在在做一个项目,遇到一个比较困惑的地方. 项目使用spring mvc + tomcat . 问题如下:
例如 需要对一个客户A 的备注进行更新.在jsp 页面上显示A 的资料(从数据库中读取出来,放到jsp 对应的form 中),包括已存在的备注信息,如 "AA". 员工B 和 员工C 都打开这个jsp 页面,也就是说都从数据库读出了A 的资料.
员工B 修改备注为"AABB",然后提交,写入数据库.而员工C 也修改该备注为"AACC",然后提交,时间上只是比B 慢一点.
结果是 员工B 修改的备注被修覆盖掉了,只显示为"AACC" 了.
有没有方法让员工B 修改备注的时候,员工C 无法修改呢??
查看资料,看到解决线程同步的方法是 获取和更新信息 都放到同一个synchronized块中,这样不同的线程不能同时获取信息,才避免了线程安全的问题.
而我上面的那个问题,是获取 和 更新分开,没办法合并在一起......;在日志中也看到一个请求产生一个线程.读取 和 更新 是两个独立的请求,各自生成一个线程.如果给读取 和 更新 都添加synchronized ,员工C 读取的线程会在员工B读取线程结束后再读取也一样,相当于没有效果.
或者说不是线程同步的问题?而是功能设计的问题?功能设计的不好导致出现这个问题的?
感谢各位提出建议.非常感谢!