代码逻辑:

if(数据不存在){
   insert();
}

线程启动后,发现数据库表中有相同的记录

解决方案

synchronized同步代码块即加同步锁,synchronized同步代码块的功能:

  • 当A线程访问对象的synchronized代码块的时候,B线程依然可以访问对象方法中其余非synchronized块的部分
  • 当A线程进入对象的synchronized代码块的时候,B线程如果要访问这段synchronized块,那么访问将会被阻塞
synchronized if(数据不存在){
    insert();
}

上面用synchronized同步代码块解决了在单点服务器中涉及到的并发问题,但是synchronized同步代码块在部署到多台服务器会失效,因为假设A机器在在执行数据库insert,判断出数据库中没有某个订单的数据,同时此刻B机器也判断出没有该订单数据,两台机器都进行insert操作,造成数据库中有重复的订单数据

多台服务器相互之间的并发导致有重复的订单数据问题解决

解决方案:
在数据库层面,用unique唯一性约束来保证数据的数据库表orderid的唯一性.
添加了唯一性约束后,假设A机器insert成功了,那么B机器再insert的时候会违反唯一性约束,报InvocationTargetException这个异常

最新文章

  1. Shell编程基础教程4--控制流结构
  2. spark配置
  3. Android的init过程(二):初始化语言(init.rc)解析
  4. mysql字段不能为空的字段为空时也能插入的方法
  5. SVN switch 用法详解
  6. LightOJ 1220 Mysterious Bacteria 水题
  7. 9.DataPager
  8. Android 开发无线调试
  9. [Manacher][HDU3613][Best Reward]
  10. 2014.8.16 if语句
  11. 将本地jar包打包到本地仓库和上传到私服
  12. awk if print
  13. Exception、Thorow、Throws、TryCatch
  14. JavaWeb数据库长时间不访问断开链接解决思路
  15. win10以管理员身份运行cmd方法
  16. Python递归函数介绍
  17. javascript 深度克隆对象
  18. HTML5布局
  19. Atcoder Tenka1 Programmer Contest 2019 题解
  20. spring mvc改动配置文件路径

热门文章

  1. python中的计时器:timeit模块
  2. python 基础(八) os模块
  3. Redis安装(centOS7)
  4. POJ-3159-Candies-(差分约束,Dijkstra)
  5. 安装好的php独立添加扩展模块
  6. Fedora如何添加第三方软件源?
  7. webstorm使用总结
  8. Jenkins结合ant传递参数
  9. 当ThreadLocal碰上线程池
  10. SAP成都研究院郑晓霞:Shift Left Testing和软件质量保证的一些思考