什么是悲观锁,什么是乐观锁呢?
下文笔者讲述悲观锁和乐观锁的简介说明,如下所示
悲观锁简介
当你每次获取数据时,认为被人会修改, 所以每次获取数据时,都会对数据加锁,我们将这种加锁机制称之为“悲观锁” 其实就是一种悲观主义的信念,我们将这种事先加锁的方式,称之为“悲观锁”
乐观锁
当你每次获取数据时,认为不会被人修改, 所以每次获取数据时,都不会对数据加锁 但是修改数据时,通过版本号的方式验证,是否有人对数据进行了更新 ,我们将这种不加锁和使用版本控制的机制称之为“乐观锁” 其实就是一种乐观主义的信念,我们将这种事不加锁的方式,称之为“乐观锁”
悲观锁的实现方式
使用synchronized关键字的方式 即可实现悲观锁
乐观锁的实现方式
1.版本号机制 在数据表中加上一个版本号version字段 标记数据被修改的次数 当数据被修改时,version值会加一 当线程A要更新数据值时,在读取数据的同时也会读取version值 在提交更新时,当刚才读到的version值与当前数据库中的version值相等时才更新,否则重试更新操作,直到更新成功。 2.CAS算法: 当多个线程尝试使用CAS同时更新同一个变量时 只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起 而被告知这次竞争中失败,并可以再次尝试 CAS操作包含三个操作数:内存位置(V)、预期原值(A)和新值(B) 当内存地址里面的值V和预期原值A值是一样的, 那么就将内存里面的值V更新成新值B CAS是通过无限循环来获取数据 当在第一轮循环中,a 线程获取地址里面的值被 b 线程修改,则a线程需要自旋,到下次循环才有可能机会运行
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。