读书笔记-java并发编程的艺术3-4章

volatile的内存语义

可见性:对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。
原子性:如果是多个volatile操作或类似于volatile++这种复合操作,整体上不具有原子性
当第二个操作是volatile写时,不管第一个操作是什么,都不能重排序。这个规则确保volatile写之前的操作不会被编译器重排序到volatile写之后
当第一个操作是volatile读时,不管第二个操作是什么,都不能重排序。这个规则确保volatile读之后的操作不会被编译器重排序到volatile读之前
当第一个操作是volatile写,第二个操作是volatile读时,不能重排序
基于保守策略的jmm内存屏障插入策略
在每一个volatile写操作的前面插入一个StoreStore屏障,后面插入一个Store Load屏障。
在每一个volatile读操作的后面插入一个Load Load屏障,插入一个Load Store屏障

双重检查锁定与延迟初始化

用volatile和双重检查锁定来避免synchronized存在的巨大性能开销
基于类初始化的解决方案
jvm在类的初始化阶段,会执行类的初始化。在执行类的初始化期间,jvm会获取一个锁,这个锁可以同步多个线程对同一个类的初始化。

java并发编程基础

线程的状态
初始 运行状态 阻塞状态 等待状态 超时等待状态 终止状态
线程间的通信
等待/通知机制
管道输入/输出流

猜你喜欢

转载自blog.csdn.net/qq_32094709/article/details/79642732