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都是保证线程安全的常用方式,不过它们的实现

方式和应用场景有所不同。在开发中,需要根据实际情况,有针对性

地选择合适的同步方式,才能更好地保证数据的正确性和程序的性能。


本文标签: 线程 操作 实现 对象 修改