转自:http://luckbubble.blog.sohu.com/80664100.html
一般的web application,可能会遇到这样的问题,你可以这样模拟:用浏览器开一个窗口,选中一条记录,编辑之,但是先不要保存,新开一个浏览器窗口,找到这条记录,删除之,然后再回到第一个窗口点击保存按钮。
假如程序没有做特别的处理,肯定会报错。
这个问题,有些公司并不考虑这样的问题,认为这个发生的概率很低,报错就报错吧,反正概率很低。
是这样的,假如是一般的小的系统,访问人数和并发数不是很多的时候,基本上不太用考虑。但是一个大的,比如说海关,银行,或者在线电子商务网站,基于系统健壮性考虑,你不得不考虑。。。
目前一个通用的做法有两种:
锁机制:1.悲观锁;2.乐观锁。
在web程序里,基本上不能考虑悲观锁(会使得系统的产生不可估量额性能损失,也失去了web 的意义了。)
当然在web程序里只能乐观锁,一个通用的做法就是每张表里设置一个字段version_no,每次删除或者修改的时候,去数据库比较一下,数据库的version_no还变化了,假如不等了,就说明在你之前发生过了变化了,这次修改或者删除动作不能成功。。。
我们在做系统的时候,由于系统初期没有考虑到,到了后来用户测试的时候,出现了这样的问题,我们就是在我们的basicDao里做了一次检查,如果不对劲就throw一个exception,在basicDao里使用了模版技巧用来保证dao和service层不用改变方法的申明,保证了这个改变影响的代码降到了最低。
但是这里有一个问题,假如是使用hibernate3技术,假如你update的时候,由于特殊的情况,你得使用merge(bo)方法---否则你会遇到a different Object with same indicator in a session,那样就会带来一个新的问题,假如你不做一点处理,hibernate发现你的这条记录已经删除了,他会automagiclly create一条新的记录到数据库里。
分享到:
相关推荐
Java并发编程实践-电子书-01章.pdf Java并发编程实践-电子书-02章.pdf Java并发编程实践-电子书-03章.pdf Java并发编程实践-电子书-04章.pdf Java并发编程实践-电子书-05章.pdf Java并发编程实践-电子书-06章.pdf ...
Java并发编程---synchronized关键
crawler-v1-v4 资源中包含一个完成的go语言并发爬虫案例,其中v1为goroutine+多worker,v2为request+worker双队列,v3将其主模块优化为同时支持v1和v2,v4继续新增多城市访问+排除重复的信息; 该案例非常适合作为go...
62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java...
- 这种优化在某些情况下可能导致并发问题,尤其是涉及到原子操作时。 ##### 2.3 Java内存模型 - **定义**: Java内存模型定义了线程之间如何共享变量,以及如何同步这些变量。 - **主要特性**: - **主内存与工作...
MyCat的主要目标是解决大数据量、高并发情况下的数据读写问题,提供了一种分库分表的解决方案,使得单个数据库无法承载的海量数据可以分散到多个数据库上,实现水平扩展。 在MyCat的生态系统中,mycat-web和mycat-...
web渗透--1--web安全原则.pdf web渗透--10--不安全的HTTP方法.pdf web渗透--11--登录认证安全测试.pdf web渗透--12--浏览器缓存攻击测试.pdf web渗透--13--目录遍历文件包含测试.pdf web渗透--14--目录浏览漏洞测试....
标题"WEBAPI多线程并发测试工具"指出,这是一个专门针对Web API进行多线程并发测试的工具。Web API通常指的是应用程序接口,它们允许不同的服务之间进行通信,以实现数据交换和功能整合。多线程并发测试则是验证在多...
互联网高并发解决方案-基于Hystrix实现服务隔离与降级互联网高并发解决方案-基于Hystrix实现服务隔离与降级互联网高并发解决方案-基于Hystrix实现服务隔离与降级互联网高并发解决方案-基于Hystrix实现服务隔离与降级...
- **Internet服务平台**:展示了如何利用该框架构建大型Internet服务,以应对数百万用户的高并发访问需求。 - **高可用分布式持久化数据存储系统**:探讨了如何在这种复杂的环境中应用该框架,确保数据的一致性和...
标题和描述概述的是“高并发高负载Web应用系统架构中的数据库架构策略”,这涉及到了数据库在Web应用系统中如何应对大规模用户访问、处理大量数据时的性能和稳定性问题。随着Web应用规模的增长,数据库作为数据存储...
- **读写锁**:通过`ReentrantReadWriteLock`类实现对共享资源的并发访问控制,允许多个读线程同时访问资源但只允许一个写线程。 - **屏障(Barrier)**:`CyclicBarrier`和`CountDownLatch`是两种常见的屏障类型,...
《实战Java高并发程序设计》是一本专注于Java并发编程实践的书籍,随书代码提供了大量示例,帮助读者深入理解并掌握在实际开发中如何处理高并发场景下的问题。本书的核心知识点涵盖了Java并发编程的基础理论、核心...
Java并发编程实践-电子书-09章.pdf
在Java Web开发中,处理高并发和高负载是一项重要的任务,尤其对于Web2.0类应用,数据库的设计和优化是首要关注点。MySQL是最常见的选择,但随着数据量的增长,性能会显著下降。应对策略包括使用主从同步复制(M-S)...
高并发编程资料-springboot、高并发 适用于学生及工作后的人员
Web并发模型粗浅探讨,并发concurrency 并行parallelism 吞吐量throughput