概述:
线程同步及线程协同步调,意思是线程通过特定的方法,实现按照一定顺序执行;
线程同步方法:
- 互斥锁:java中互斥锁主要是synchronized和ReentronLock两种方式。线程执行操作前需要获取互斥锁,获取成功则执行后续逻辑,获取失败则阻塞
- 读写锁:读锁和读锁共享,读写锁互斥
- 条件变量:操作前先获取锁,然后判断条件是否满足,如果满足则执行后续逻辑。不满足则进入阻塞等待状态并释放锁。当条件满足时,唤醒阻塞线程,尝试获取锁,
- 信号量:
- sem初值=1
- P操作:将sem变量值-1,并进行判断,如果sem<0,则线程阻塞
- V操作:将sem值+1,如果sem<1,则唤醒一个阻塞线程
- 自旋锁:线程循环执行compaareAndSet()方法,尝试修改变量,修改成功则表示获取锁,执行后续逻辑。与互斥锁不同的是,线程未获取锁,进入阻塞状态,会一直占用cpu。