1.需求分析
项目上线后,在并发的情况,数据库会插入重复的记录;在这种情况,mysql的悲观锁或乐观锁可以用来实现代码逻辑的并发控制。
2.悲观锁
①悲观锁,属于排它锁;当事务在操作数据时,它会把这部分数据进行锁定,直到操作完毕后再解锁,然后其他事务操作才可操作这部分的数据,这可以防止其他事务读取或修改表中的数据;大多数情况下,悲观锁依靠数据库的锁机制实现排它性。
悲观锁的应用实例:
②synchronized属于典型的悲观锁,通过同步代码块将需要锁住的逻辑锁住,当该事务操作完成后,后续的事务方可执行该逻辑
synchronized (ServiceAutoOverTimeJob.class){
if(!serviceIsOverTime.equals("1") && serviceStauts.equals("1") && serviceEnabled.equals("1") && publishFree.equals("0")){//待接单,服务没超时,可用状态,付了车票钱
//超时单
pinCarMapper.setServiceTimeOut(serviceId);
String orderId = businessOrderMapper.findOrderIdByServiceId(serviceId);
PinCar pinCar = pinCarMapper.selectByPrimaryKey(serviceId)