java+数据库锁篇
最近在公司遇到一个问题,就是关于脏数据的处理,就是用户在添加或改变某条数据时,同时访问一个方法,导致插入两条数据或者是将值改变几次。
java的synchronized关键字
以前了解synchronized关键字的用法,但并没有实际用过,所以在我们业务量不大的情况下,这个是可以满足要求的,保证并发。但是,在A方法未执行完时,是无法返回正确的值,所以在同时访问A方法的其他请求时,还是无法得到正确的值,这个时候需要在数据库上做文章。
数据库锁:
其他的分类不说了,接下来说一下悲观锁和乐观锁。
悲观锁分类
1.表锁,对整张表都处于会一直更新的状态都锁住。
2. 行锁,锁的作用范围是行级别,数据库能够确定那些行需要锁的情况下使用行锁,如果不知道会影响哪些行的时候就会使用表锁。举个例子,一个用户表user,有主键id和用户生日birthday当你使用update … where id=?这样的语句数据库明确知道会影响哪一行,它就会使用行锁,当你使用update … where birthday=?这样的的语句的时候因为事先不知道会影响哪些行就可能会使用表锁。