行锁
线程a锁定id=1的行
此时线程a未提交事务
start TRANSACTION;select * from testa where id=1 for update;
线程b此时开始请求锁住id=1的行
会一直处于等待
线程a开始提交事务
commit
事务b这边立刻完成锁行的操作
并发情况下,资源锁
作用:同一时间,只有一个事务可以对数据库的某个资源,做写的操作。
资源表
当有线程要处理某个资源(写操作)时候,先要获取该资源的锁
@Select(" select interface_value from t_interface_lock where interface_code = #{code} and interface_value ='y' for update skip locked ")public String lockSource(@Param("code") String code@Select(" select interface_v);
String lock = interfaceLockDao.lockSource("syncProduct");if (StringUtil.isNull(lock)){System.out.println("商品增量同步调度未能抢到锁,调度终止,节点IP:" + IPAddressUtil.getHostAddressStr());return null;}
执行interfaceLockDao.lockSource(“syncProduct”);后,表中syncProduct对应的行会被当前事务锁住,期间其他线程想要操作给数据,会处于阻塞等待,指导当前线程事务释放了该行锁。
