线程同步

116 阅读1分钟

概述:

线程同步及线程协同步调,意思是线程通过特定的方法,实现按照一定顺序执行;

线程同步方法:

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