摘要:
之前对并发编程的一些层次和基本概念不清晰,今天总结和梳理一下
概述
可以这么理解
原子指令实现了锁
锁又实现了较大的原子操作
阻塞机制是基于锁来实现的
阻塞机制、锁又实现了线程同步和线程安全
关于锁:
0层
原子指令 流水线
缓存一致性协议
1 层 Java层
volatile(利用缓存一致性协议) 轻量级的synchronized
当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。
synchronized(线程同步)
可以认为代码块是变量了
同一时间只能被一个线程所执行,它所限定的区域前后有两个指令 monitorenter指令 monitorexit
2 层
排他锁:
Lock 主要的优点是可以显示释放锁 而且可以连环的锁定和释放 基于synchronized实现
重入锁
非排他锁
读写锁:读者线程是可以同时访问的 但是写线程是排他的
3 层:Condition接口 锁/唤醒机制:
基于调用上面第2层的锁来实现的
任意一个Java对象,都拥有一组监视器方法(定义在java.lang.Object上),主要包括wait()、
wait(long timeout)、notify()以及notifyAll()方法,这些方法与synchronized同步关键字配合,可以
实现等待/通知模式。Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等
待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的。
原子操作:
底层:
原子指令
cpu流水线
1.使用总线锁保证原子性
2.第二个机制是通过缓存锁定来保证原子性
java层
2 java的原子操作
(1)使用循环CAS实现原子操作
(3)使用锁机制实现原子操作
偏向锁、轻量级锁和互斥锁
线程同步/安全
进程间通信
上面讲了这么多,最后的落脚点,其实就是通信