并发编程

并发和并行 并发(
Concurrency): 偏重于多个任务交替执行, 而多个任务之间有可能还是串行的. 并行(Parallelism): 真正意义上的同时执行.并发级别
- 阻塞
- 无饥饿
- 无障碍
- 无锁
- 无等待
JMM 原子性(
Atomicity): 一个操作是不可中断的,即使是在多个线程一起执行的时候, 一个操作一旦开始, 就不会被其他线程干扰. 可见性(Visibility): 一个线程修改了某一个共享变量的值, 其他线程是否能够立即知道这个修改. 有序性(Ordering): 代码是从先往后, 依次执行的.哪些指令不能重排: happen-Before原则
- 程序顺序原则: 一个线程内保证语义的串行性
volatile规则: volatile变量的写, 先发生于读, 这保证了volatile变量的可见性- 锁规则: 解锁(
unlock)必然发生在随后的加锁(lock)前 - 传递性: A先于B, B先于C, 那么A必然先于C
- 线程的
start()方法先于它的每一个动作 - 线程的所有操作先于线程的终结(Thread.join())
- 线程的中断(interrupt())先于被中断线程的代码
- 对象的构造函数执行、结束先于finalize()方法