synchronized(synchronized是悲观锁吗)

作者 : 模板吧小编 本文共755个字,预计阅读时间需要2分钟 共829人阅读

synchronized(synchronized是悲观锁吗)

1、是一个悲观锁的实现,因为它假设任何时候都有可能发生竞争,因此在执行同步代码块前会先获得锁,并且如果获取不到锁就会一直等待。这样可以确保在同一时间只有一个线程可以访问共享资源,从而保证线程安全。

2、但是这种做法会带来一定的性能损失,因为大部分时间锁并没有被竞争,但是所有线程都需要等待。相比之下,乐观锁的实现原理是假设竞争很少发生,因此在执行同步代码块前不会先获得锁,而是直接执行操作。在更新共享资源时,先读取资源的版本号,然后进行更新操作。

3、如果其他线程在此期间修改了共享资源,那么版本号就会发生变化,此时更新操作会失败。此时,当前线程可以选择放弃操作,也可以重新尝试更新操作。

4、乐观锁的实现方式通常会比悲观锁更加高效,因为大部分时间不需要等待锁的释放。是一种基于乐观锁实现的原子操作。它的原理是先比较共享资源的当前值和期望值是否相等,如果相等就使用新值替换当前值。操作可以保证原子性,因为在执行操作期间,如果共享资源的值发生变化,操作会失败,此时就会重新尝试操作,直到成功为止。

5、操作具有以下特性:原子性:操作是一种原子性操作,可以保证在同一时刻只有一个线程可以修改共享资源。无锁操作:操作不需要加锁,因此不会引起线程阻塞和切换,效率比较高。问题:如果共享资源的值在操作过程中从变成了,然后再从变成了,那么操作会错误地认为共享资源的值没有发生变化,从而引发潜在的问题。为了解决这个问题,可以使用版本号等机制来避免。

synchronized(synchronized是悲观锁吗)

1、需要注意的是,操作虽然能够提高性能,但是也有一定的局限性,比如只能适用于单个共享变量的操作,不能适用于复合操作等场景。在使用操作时需要根据实际场景进行取舍。

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
25模板吧 » synchronized(synchronized是悲观锁吗)