问题: A线程查询出数据,若状态为1则进行一系列操作,然后更改状态。 B线程查询出数据将状态从1改为2。 现在B线程可能在A线程执行的时候同时发生导致A线程逻辑有问题 请问这个情况如何避免呢
这就需要了解锁的概念。如果系统对性能要求不高的话,比较容易实现,任何线程读取数据时先判断和更新锁的状态;如果锁已经被别的线程抢占则不能直接更新数据,需要不断循环等锁的释放。######能具体说下嘛 或者有相关文章吗?######数据版本可以解决这个问题######乐观锁,悲观锁######读写锁了解下######不是有数据库事物么。。######a,b线程启用事务,在where的更新时候必须是状态=1,并set状态=2. 如果a更新成功,b一定会更新失败。######这个就是典型的数据库乐观锁: 在表中增加一个类似的 version 字段(int类型),每次更新带上version条件判断,并将这个 version 字段+1,例如:
-- 业务在更新前执行查询操作,此时把当时的 version 字段查询出来 select name, version from task where id=1;
-- 业务在更新时,带上 version 条件, -- 如果在更新时已经有别的线程先更新了,则表中此时 version 字段的值就和你之前查询到的 version 值不一样了, -- 这样条件 where version=你的值 就不成立了,你的更新执行就无效了,从而解决了并发更新问题。 -- 这就是 version 乐观锁机制。 update task set name='新值', version=version+1 where id=1 and version=前面查询到的version值
希望可以帮到你。######嗯 其实这就和自增时间 以时间为条件更新一个道理吧
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。