并发编程01

并发编程01
并发编程01
并发编程01
并发编程01
并发编程01

并发编程01

并发编程01
JMM java内存模型
规定a线程如何何时看到B线程修改和保存的共有变量。
并发编程01

Registers :是内部寄存器。
并发编程01
并发编程01

同步的八种操作与规则

并发编程01

并发编程01

并发编程01

**

线程安全性:

**

并发编程01
并发编程01
atomic 源码里面是用了一个Unsafe的类。
并发编程01
并发编程01

并发编程01

VAR1是需要处理的对象值, var2 是进行增加的2 +1 操作中的2 var4 是1 而 var5 是从底层拿到的一个值(看是不是2 ) 就是 在进行2+1 操作之前是不是底层已经把2 进行修改了。 var5 是底层取到的值2 。
也就是 2 和底层拿到的值是不是相等的 如果相等就 执行2+1 操作 更新成3 v否则重新取出来变量var5 VAR是重新从变量var1 里面取一次。
var1 中拿出来的var2 和底层获得的var5 进行比较如果相同就进行下面操作 执2 +1 如果不相同就重新获得 var1 中获得var2 的值 。直到 相同的时候才进行下面操作。

并发编程01

并发编程01

并发编程01
并发编程01

并发编程01
并发编程01
并发编程01

安全发布对象
并发编程01

并发编程01

通过枚举模式是最安全的方式进行实例化。

并发编程01

不可变对象

final关键字 修饰类 不能被继承
修饰方法
并发编程01

线程不安全的类

并发编程01
stringbuilder是线程不安全的类

stringbuffer是线程安全的类
为什么?
性能损耗 字符创拼接 计算更快

并发编程01

同步容器

并发编程01

vector是线程安全的
同步容器采用的是synchronize 实现 显示中使用的是并发容器。

**

并发容器

**
并发编程01

读写分离 另外开辟空间避免冲突 读的时候在元素上读的 不需要加锁的 而写操作是 需要加锁的。避免多个线程并发修改

并发编程01

并发编程01