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