辰乐游戏:为玩家推荐真正好玩的手机游戏!

辰乐游戏 > 游戏攻略 > java中同步的优缺点

java中同步的优缺点

作者:佚名 来源:辰乐游戏 时间:2022-02-17 00:00:00



synchronized在java的优缺点

当使用synchronized时,您可以修饰这些方法,并结合锁执行一些操作。当然,这样也会带来一些缺点。为了弥补这一缺陷,同步锁的状态可以分为三种情况。本文首先讨论了synchronize的缺点,然后针对这种情况,给出了使用不同synchronize锁的优缺点的解决方案。

1.1 .同步的缺点

Synchronized关键字有利有弊,弊多贼多,所以后来出现了更好的锁。下面来分析一下,这也是面试中经常被问到的问题。

(1)效率低

synchronized关键字是不间断的,这意味着如果一个等待线程不能获取锁,它将一直等待,不能做任何其他事情。

synchronized关键字的一个改进是设置超时。如果一个线程长时间得不到锁,它可以做别的事情。

(2)不够灵活。

在加锁和解锁的时候,每个锁只能被一个对象处理,这和现在的分布式思维是不兼容的。

(3)无法知道锁是否被成功获取。

如果锁被获得,我们无法知道。既然不可能知道,那就不好改善了。

既然synchronized有这么多缺陷。所以才出现了各种锁。

2.2 .同步锁的优点和缺点

各种锁不是互相替代,而是不同场景下的不同选择。绝对不是重量级锁不合适。每种锁只能升级,不能降级,也就是从偏置锁->轻量级锁->重量级锁,这个过程就是成本逐渐增加的过程。

(1)如果是单线程使用的话,偏置锁无疑是成本最低的,它可以解决问题。甚至不需要CAS,只需要比较内存中的对象头;

(2)如果其他线程竞争,则偏向锁将升级为轻量锁;

(3)如果其他线程通过一定次数的CAS尝试失败,将进入重量级锁;

第三种情况,当你进入同步代码块的时候,你要建立一个偏向锁,撤销一个偏向锁,建立一个轻量级锁,升级到重量级锁。最后你还得靠重量级锁来解决问题,所以成本比直接用重量级锁要大得多。大多数情况下,偏置锁定是有效的。

  • 精品游戏
  • 最热榜单