乐观锁:顾名思义乐观锁即任务每一次查询的人都不是要修改这条数据的人,保持乐观心态的,实现原理无非是在每条数据后加一个字段Version字段,每次更新去比较这个字段,字段一致则没有人更新过此条数据并将更新后的数据进行version+1即可
悲观锁:悲观锁即分为意向锁和排他锁,意向锁又为读锁,排他锁为写锁,意向锁的实现查询语句后加lock in share mode,意向锁会等所有加锁对象将锁释放后才可以修改,排他锁的实现查询语句后加for update,排他锁对于谁先取到锁谁有操作权,后面想取锁的只能等待,直至前一个取锁的人将锁释放为止
java的实现方式与mysql相同,需要将事务改为手动提交
@Autowired
private PlatformTransactionManager platformTransactionManager;
@Autowired
TransactionDefinition transactionDefinition;
// 开启事务
TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
try
{
//要进行的操作
//事务提交
platformTransactionManager.commit(transactionStatus);
return user;
}catch (PessimisticLockingFailureException e)
{
//事务回滚
platformTransactionManager.rollback(transactionStatus);
}