为什么 加上 synchronized(this) 后还是出现了线程同步的问题
我这边的详细情况是这样的、
项目采用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;
}