1多线程调用方法test1()和test2()
2两个方法调用事物
3在事物里面都实现了对同一张表的先删除后插入
4如果不用事物的话,会出现删除删除增加增加的情况,即最后结果是两条新增记录。
5使用事物后结果只能是删增删增,结果一条记录,实现了锁的功能。
@Override
publicList<Map>getProtraitDataQuality(Mapmap){
returngetPortraitDomain().getProtraitDataQuality(map);
}
private static final Log log = LogFactory.getLog(PortraitInitCmd.class);
public void test1(){
getTransactionTemplate().execute(newTransactionCallbackWithoutResult(){
@Override
protectedvoiddoInTransactionWithoutResult(TransactionStatusarg0){
log.debug("test1start");
log.debug("test1deletestart");
V6SqlSessionUtil.getSqlSession().delete("PortraitDomain.testdelete");
log.debug("test1deleteend");
try{
log.debug("test1sleepstart");
Thread.sleep(5000);//延时2秒
log.debug("test1sleepend");
}catch(InterruptedExceptione){
e.printStackTrace();
}
log.debug("test1insertstart");
V6SqlSessionUtil.getSqlSession().insert("PortraitDomain.testinsert");
log.debug("test1insertend");
}
});
}
public void test2(){
getTransactionTemplate().execute(newTransactionCallbackWithoutResult(){
@Override
protectedvoiddoInTransactionWithoutResult(TransactionStatusarg0){
try{
log.debug("test2sleepstart");
Thread.sleep(1000);//延时2秒
log.debug("test2sleepend");
}catch(InterruptedExceptione){
e.printStackTrace();
}
log.debug("test2start");
log.debug("test2deletestart");
V6SqlSessionUtil.getSqlSession().delete("PortraitDomain.testdelete");
log.debug("test2deleteend");
log.debug("test2insertstart");
V6SqlSessionUtil.getSqlSession().insert("PortraitDomain.testinsert");
log.debug("test2insertend");
}
});
}
最终结果如下: