158.并发编程(二):共享模式之内存,无锁和不可变

本文详细探讨了Java内存模型(JMM),包括可见性、有序性,以及如何通过volatile解决相关问题。接着,文章介绍了无锁编程中的CAS、volatile以及Atomic类的应用,解释了无锁编程的优势和限制。最后,讨论了不可变对象的设计,包括final关键字的使用和保护性拷贝。通过深入理解这些概念,开发者可以更好地处理并发编程中的线程安全问题。
摘要由CSDN通过智能技术生成

目录

一、共享模型之内存

1、Java 内存模型(JMM)

2.可见性

(1)循环无法退出案例

(2)原因分析

 (3)解决方案

(4)可见性与原子性

(5)模式之两阶段终止

(6)模式之Balking

3.有序性

(1)指令重排

(2)多线程下指令重排问题

(3)解决方法

(4)volatile原理

(5)案例分析

(6)happens-before

(7)练习

二、共享模式之无锁

1.无锁解决线程安全问题

2.cas和volatile

(1)cas

(2)volatile

(3)为什么无锁效率高

(4)cas的特点

3.原子整数

4.原子引用

5.原子数组

6.字段更新器

7.原子累加器:LongAdder

8.LongAdder原理

(1)使用cas实现一个自旋锁

(2)原理之伪共享

 (3)add方法分析

 9.unsafe

(1)unsafe对象的获取

(2)unsafe的cas操作

(3)使用自定义的AtomicData 实现之前线程安全的原子整数 Account 实现

三、共享模型之不可变

1.日期转换的问题

2.不可变设计

(1)final的使用

(2)保护性拷贝

3.模式之享元

4.final原理

*1)设置final原理

*2)获取final变量的原理

*3)无状态


一、共享模型之内存

1、Java 内存模型(JMM)

JMM 即 Java Memory Model,它定义了主存(共享内存)、工作内存(线程私有)抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、 CPU 指令优化等。

JMM 体现在以下几个方面:

  • 原子性 - 保证指令不会受到线程上下文切换的影响
  • 可见性 - 保证指令不会受 cpu 缓存的影响
  • 有序性 - 保证指令不会受 cpu 指令并行优化的影响

2.可见性

(1)循环无法退出案例<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏哥哥啊Aaaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值