admin 管理员组文章数量: 1184232
2024年3月21日发(作者:关于break语句与continue语句)
cas 的实现以及 synchronized 的实现原理
CAS的实现原理
CAS,也就是Compare And Swap,即比较并交换,如其名,就是将当前
内存中的值与旧值进行比较,如果相同,则使用新值替换旧值,否则
不会发生任何操作。
其主要思想是:首先读取当前值,然后比较内存中的当前值与期望值
是否相等,如果相等,则说明该值没有被修改,可以进行修改操作,
否则说明已经被修改过了,就不进行操作。
CAS的实现分为两个过程:
1.读取操作。即将内存中的当前值读取到寄存器中,使其与期望值进
行比较。
2.写入操作。即当比较成功后用新值替换当前内存中的旧值。
CAS的优点:
1.非阻塞:由于CAS操作是原子性的,不需要加锁,因此不会出现死
锁等问题。
2.乐观锁:CAS操作实现的是乐观锁,即预先假设没有其他线程会修改
共享变量的值。如果发现假设错误,就会取消修改操作,重新读数,
并进行新的操作。
3.可见性:CAS操作能够保证多个线程对同一个变量的访问时,都能够
看到同一个变量值,而不会出现线程B读取到的变量值还是线程A修
改之前的值,即可保证数据的正确性。
Synchronized的实现原理
Synchronized是Java中的一种基本的同步机制,它提供了原子性和可
见性保证,并消除了线程之间的竞争。
Synchronized是可重入锁,并且有两种不同的形式:对象锁和类锁。
1.对象锁:是同步一个对象或实例的锁。Synchronized关键字有两个
最常用的用法:synchronized方法和synchronized块。一个
synchronized方法在执行之前必须获得它所属对象的锁,而
synchronized块则可以指定任何对象来作为锁。
2.类锁:是同步类的锁。它通常是用在多线程环境中需要对所有实例
进行同步时。
Synchronized底层实现原理:
1.6及以下版本中, Synchronized依赖于操作系统的Mutex
Lock的实现。
2.在JDK1.7及以上版本中,Synchronized采用了和Lock一致的实现
方式:通过调用操作系统的Compare-and-swap(CAS)指令来实现锁。
Synchronized的优缺点:
1.可靠性高:Synchronized保证同一时间只有一个线程可以访问共享
资源,保证了数据的正确性。
2.开销大:Synchronized在多线程访问时,容易产生线程的竞争,导
致CPU占用率升高,性能下降。
3.难以调试:当线程间发生死锁时,由于Synchronized是由JVM自动
实现的,程序员无法直接参与其中,因此难以进行调试。
总结:
CAS和Synchronized都是保证线程安全的常用方式,不过它们的实现
方式和应用场景有所不同。在开发中,需要根据实际情况,有针对性
地选择合适的同步方式,才能更好地保证数据的正确性和程序的性能。
版权声明:本文标题:cas 的实现以及 synchronized 的实现原理 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1710990001a583038.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论