前言
在看这本书之前,看过了《java多线程编程的核心技术》书中列出了一些java多线程会遇到的基本的类和方法,sychronized,lock,executor等的基本使用方法,为看这本书打了一些基础。《java 并发编程的艺术》中除第一章讲各种多线程概念的内存语义不好理解外,其他章节基本是对多线程concurrent包中多种类的源码讲解,个人认为很有必要一看。
内容
java并发编程 --》 第一部分从底层讲java的内存语义,happends-before,编译阶段的重排序和cpu总线的锁机制,
java内存模型: java 线程 --》 本地内存 ---》 共享内存。
volatile保证变量对内存的可见性,但是不保证操作的原子性。(在前期是通过对地址总线加锁实现。后期有改进。。(具体改进方式???))
syschronized:加锁,在编辑阶段使用关键字(锁(什么锁????了))替换。
第一部分看得头晕脑胀,很难看懂,后来凑合看完了。
第二部分: lock.lock() 所做的操作包括: 1、将当前线程放入同步队列;2、进入自旋状态(for 循环,判断能否获取锁);3、获取锁,执行线程。
讲lock的使用和实现方式。 lock接口,同步器;对线程安全的同步队列做自旋(队列中每个节点自己做循环,满足条件,则退出同步队列。)
所谓自旋,即同步队列中的每个节点进行自我检查: 首先检查自己是否是头结点;然后检查自己能不能获取到锁。 如果两个条件满足,就返回,结束自旋;
ReentrenLock 可重入锁,也可以控制锁的公平和不公平。