java锁和数据库锁
序言
锁在并发发中占有至关重要的地位,无论是后台语言还是数据库语言,很多时候都要通过锁来保证数据一致性。
乐观锁悲观锁
要不要加锁来区分,乐观悲观,是一种思想。
乐观锁
乐观锁,乐观地假设数据一般不会造成冲突,所以在数据提交的时候才会对数据冲突与否的校验,如果冲突返回异常信息。乐观锁适用于读多写少的场景。
悲观锁
悲观的假设每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁。
java锁与数据库锁比较
目的相同都是为了保证数据一致性,java是通过线程锁,锁定缓存行等等保证内存数据行为的正确。数据库通过行、表、页锁保证数据库数据行为的正确。加锁只是手段,目的是保证数据行为正确。乐观锁的思路一致的,CAS通过版本控制来避免ABA问题,数据库通过版本或时间戳实现乐观锁。