Java中的锁之乐观锁与悲观锁

发布时间:2019-11-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Java中的锁之乐观锁与悲观锁脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

1、 分类一:乐观锁与悲观锁

  a)悲观锁:认为其他线程会干扰本身线程操作,所以加锁

                    i.具体表现形式:synchronized关键字和lock实现类 

  b)乐观锁:认为没有其他线程会影响本身线程操作,所以不加锁

                    i.具体表现形式:java的原子类的递增操作                     ii.原理:采用cas算法 

  c)Cas算法:交换与比较

                    i.涉及三个数:需要读写的内存值V,进行比较的值A,要写入的新值B                     ii.具体操作:若A=V,就用B更新V,否则不进行任何操作                    iii.会用ABA问题:cas算法需要判断内存值V是否发生变化,如果a值变成b值然后又变回a值,cas算法就会无法判断,产生错误。解决上问题:在变量前添加版本号,将aba变成1a2b3c                    iv.循环时间长开销大,因为自旋需要消耗cpu                     v.只能保证一个共享变量的原子操作 

2、 分类二

  a) 重入锁:支持重进入的锁,排它锁

3、 分类三

  a)读写锁:一对锁,读锁,写锁,在同一时刻允许多线程访问

脚本宝典总结

以上是脚本宝典为你收集整理的Java中的锁之乐观锁与悲观锁全部内容,希望文章能够帮你解决Java中的锁之乐观锁与悲观锁所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。