为什么 加上 synchronized(this) 后还是出现了线程同步的问题

老帅哥23333 2014-11-04 11:28:22
我这边的详细情况是这样的、
项目采用ssh 架构。前端struts2 接收请求。采用多实例(原型)接收前台请求,然后调用 spring 中的service 进行处理。spring的service 都是单例的。 有一部分的业务逻辑,中有对查询的结果进行保存,而且需要每一次查询的结果都要求与其他的不一样。可以理解成,为你每次查询的结果不一样 将 已查询到信息在查询后保存,因为这个 service 是单一的实例。
我使用 synchronized 锁定这个对象
synchronized(this) {
searchCode(); //查询最新的数据信息
saveCode(); //保存查询结果信息
}

运行时在这块代码还是会出现 batchUpdateError
2014-11-04 09:19:50,264 ERROR - ORA-00001: 违反唯一约束条件 (SCIERP.SYS_C0011508)
2014-11-04 09:19:50,264 ERROR - ORA-00001: 违反唯一约束条件 (SCIERP.SYS_C0011508)
2014-11-04 09:19:50,295 ERROR - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at...............................
Caused by: java.sql.BatchUpdateException: ORA-00001: 违反唯一约束条件 (SCIERP.SYS_C0011508)
.....................


//有同步问题的程序块
synchronized(this) {
Briefinfo briefCarinfo=this.getSearchData(emid, itemAndLoginfo);

if(briefInfo!=null)
sellGrouptmpDao.saveSellGrouptmp(new SellGrouptmp(new Employee(emid),new Info(briefInfo.getId()),new Date()));
else
return itemAndLoginfo;
}
...全文
320 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
crx_np 2014-11-11
  • 打赏
  • 举报
回复
老帅哥23333 2014-11-11
  • 打赏
  • 举报
回复
问题找到了,关键部分,哎,无视了,添加表中,另一个 字段数据的唯一性。
老帅哥23333 2014-11-04
  • 打赏
  • 举报
回复
惯例,沙发自己坐

5,655

社区成员

发帖
与我相关
我的任务
社区描述
Web开发应用服务器相关讨论专区
社区管理员
  • 应用服务器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧