lock的基本使用和原理

2019-11-07  本文已影响0人  写代码的杰西

J.U.C
java.util.concurrent 并发工具包

ReenterantLock (重入互斥锁)

可重入锁:锁中再获取锁。解决死锁问题
比如

synchorized demo(){
  demo1()
}
demo1{
  synchorized{
}
}

两个方法同属一个类。在对象调用demo方法时,获取了对象锁。在调用demo1时,仍然可以获取锁(增加重入次数),不用等待当前线程释放demo的锁(否则就死锁了)
lock.lock()
synchronized和reenterantlock 都是支持重入的。

当多个线程竞争锁的时候,其他线程怎么办?

aqs 同步队列 同步工具
aqs分为两种功能:
1、独占-》互斥
2、共享-》读写锁


image.png

AQS的基本实现

aqs有个state 表示同步状态 0是无锁状态 大于0是有锁
有个head和tail

上一篇下一篇

猜你喜欢

热点阅读