最近看完《Java并发编程的艺术》一书,收获颇丰,在此写一下java并发编程的概要之类的文章,概述java并发编程的一些工具和原理。
《Java并发编程的艺术》和《java编程思想》大概内容差不多,《Java并发编程的艺术》多了些并发编程工具的原理介绍,介绍的比较深入。它里面讲的关于多核心的cpu如何进行多线程操作,线程之间的共享变量的可见性如何实现。顺序优化方面,介绍了java的编译器顺序优化、指令级优化、内存系统重排序,而为了结果的一致性,java编译器会进行插入内存屏障来限制java语句的顺序重排。然后介绍volatile和synchronied、Lock、final的内存语义,双重检查锁定与类加载的线程安全性的解释。接着介绍线程的一些基本用法,线程之间的通讯。然后介绍Lock锁的原理,对同步器进行介绍,在了解同步器之后,可以实现自己的锁。关于锁书里介绍了偏向锁、轻量级锁、重量级锁、可重入锁、公平锁、非公平锁、读写锁。接着介绍了java并发容器,ConcurrentHashMap、ConcurrentLinkedQueue、阻塞队列等,介绍Fork/Join框架,介绍13个原子操作类。然后介绍并发的工具,等待多线程完成的CountDownLatch、CyclicBarrier、控制并发线程数量的Samaphore、线程间交换数据的Exchange。接着介绍线程池原理,Executor框架。参考《java核心技术》,本文章还增加了关于Callable和Future、FutureTask的介绍,ThreadLocal、InheritableThreadLocal、阿里的线程池中父子线程变量的场地解决方案ThreadLocal Transmittable ThreadLocal(TTL)。本文的主要目的是简单介绍java并发编程的整个架构,知道遇到并发编程的场景时知道解决问题的一个方向:
1、volatile、synchronized底层实现原理
2、java内存模型
3、线程的基本介绍及线程间的通信
4、锁
5、并发容器和Fork/Join框架
6、原子操作类
7、并发工具
8、线程池
9、Callable和Future
10、ThreadLocal、InheritableThreadLocal、ThreadLocal Transmittable ThreadLocal(TTL)
11、Executor框架

1、volatile、synchronized底层实现原理
volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的的可见性,如下图,线程1在核心1中运行,读取了共享变量a,当a是声明为volatile的时候,线程1将缓存行的a写回内存时,会导致其他线程对应的缓存行的a为无效值,需要重新读取线程1写内存后的a值。这便是volatile的可见性大概描述。
而synchronized用的锁存在java对象头中,对象头中存在一个锁状态的标志位,标志位的不同值表明不同的锁,锁的状态会进行升级。锁的类型包括:偏向锁、轻量级锁、重量级锁。锁的升级根据锁的竞争状况进行升级,没有锁的降级。
CAS(Compare and Swap):比较并交换,输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。
java并发编程简介
2、java内存模型
3、线程的基本介绍及线程间的通信
4、锁
5、并发容器和Fork/Join框架
6、原子操作类
7、并发工具
8、线程池
9、Callable和Future
10、ThreadLocal、InheritableThreadLocal、ThreadLocal Transmittable ThreadLocal(TTL)
11、Executor框架

相关文章: