随笔

<--个人成长笔记系列-->知识点解析之synchronized

2019-10-08  本文已影响0人  天痕丿泪倾城

JAVA知识点:

    (承接synchronized的实现原理) 对象存储:

        OOP-Klass 模型 去描述Java对象的实例,OOP表示普通对象指针;Klass表示描述 对象实例 的具体逻辑

        HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)

    (掌握)对象头:如果对象是数组类型,则JVM用3个字存储对象头;否则,使用2个字

Mark Word

对象头相关文章:https://www.jianshu.com/p/ff6591b26da5https://www.jianshu.com/p/3d38cba67f8b

    (了解)CAS:全称Compare and swap,字面意思:”比较并交换“,一个 CAS 涉及到以下操作:

````

我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。

1、比较 A 与 V 是否相等。(比较)

2、如果比较相等,将 B 写入 V。(交换)

3、返回操作是否成功。

````

当多个线程同时对某个资源进行CAS操作,只能有一个线程操作成功,但是并不会阻塞其他线程,其他线程只会收到操作失败的信号。可见 CAS 其实是一个乐观锁。

    (了解)归纳CAS的应用场景:

1、CAS 的使用能够避免线程的阻塞。

2、多数情况下我们使用的是 while true 直到成功为止。

    (了解)CAS 缺点:

1、ABA 的问题,就是一个值从A变成了B又变成了A,使用CAS操作不能发现这个值发生变化了,处理方式是可以使用携带类似时间戳的版本AtomicStampedReference

2、性能问题,我们使用时大部分时间使用的是 while true 方式对数据的修改,直到成功为止。优势就是相应极快,但当线程数不停增加时,性能下降明显,因为每个线程都需要执行,占用CPU时间。

上一篇下一篇

猜你喜欢

热点阅读