【并发编程篇09】Synchronized关键字原理

63 阅读1分钟

image.png

Synchronized【对象锁】采用互斥的方式让同一时间至多只有一个线程持有【对象锁】,其他线程再想获取这个【对象锁】时会阻塞住。

Monitor

image.png

字节码信息:java -v xxx.class 查看class字节码信息

image.png

monitorenter 上锁【对象锁】

monitorexit 解锁【对象锁】

monitorexit 解锁【对象锁】异常释放

Monitor工作机制

Monitor中文意思是监视器,是由JVM提供,使用C++语言实现

Monitor结构:

  • WaitSet
  • EntryList
  • Owner

image.png

Synchronized关键字原理

步骤:

  1. 当一个线程1执行时,会首先让对象锁这个对象和Monitor关联
  2. 然后判断Monitor中的Owner属性,锁是否被人获取了,如果没有被人获取,则该线程获取锁
  3. 当其他线程2执行时,这时对象锁已经被获取,所以其他线程将放入EntryList中等待(BLocked)
  4. 当线程1释放了对象锁,那么就会唤醒EntryList中的线程,让它们去竞争对象锁
  5. 当其中的线程调用了wait方法时,就不会放入EntryList中等待了,而是放入WaitSet中