Book:实战Java高并发程序设计(第二版)
实战Java高并发程序设计(第二版)
- 为什么会有并行计算?
- 并行计算需要回答的问题
- 基本概念
- 并发级别有哪些?
- Amdahl定律和Gustafson定律
- Java并发三特性
- 进程和线程
- 线程的生命周期
- Thread类run()与start()的区别
为什么会有并行计算?
单核CPU → 摩尔定律失效 → 多核CPU → 并行计算
Donald Ervin Kunth对于多核CPU的评价:这种现象或多或少是由于硬件设计师已经无计可施了,他们将摩尔定律失效的责任推给了软件开发者
并行计算需要回答的问题
①如何保证线程安全?
②如何正确理解线程间的无序性和可见性?
③如何将串行程序改造为并行程序?
基本概念
同步和异步(synchronous&asynchronous)
并发和并行(concurrency¶llelism)
临界区(critical section)
阻塞和非阻塞(blocking&non-blocking)
死锁、饥饿和活锁(deadLock、starvation&liveLock)
并发级别有哪些?
①阻塞(blocking):synchronized和可重入锁
②无饥饿(starvation-free):公平锁
③无障碍(obstruction-free):乐观锁
④无锁(lock-free):CAS
⑤无等待(wait-free):RCU
Amdahl定律和Gustafson定律
Java并发三特性
①原子性
②有序性
③可见性 → 指令重排序 → happen-before原则
进程和线程
进程:房子
线程:房子里的人
线程的生命周期
①new
②runnable
③blocked
④waiting
⑤time-waited
⑥terminated