并发编程01
JMM java内存模型
规定a线程如何何时看到B线程修改和保存的共有变量。
Registers :是内部寄存器。
同步的八种操作与规则
**
线程安全性:
**
atomic 源码里面是用了一个Unsafe的类。
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 的值 。直到 相同的时候才进行下面操作。
安全发布对象
通过枚举模式是最安全的方式进行实例化。
不可变对象
final关键字 修饰类 不能被继承
修饰方法
线程不安全的类
stringbuilder是线程不安全的类
stringbuffer是线程安全的类
为什么?
性能损耗 字符创拼接 计算更快
同步容器
vector是线程安全的
同步容器采用的是synchronize 实现 显示中使用的是并发容器。
**
并发容器
**
读写分离 另外开辟空间避免冲突 读的时候在元素上读的 不需要加锁的 而写操作是 需要加锁的。避免多个线程并发修改