LOCK 产生背景:死锁
首先来说下死锁,什么是死锁?总结以下四点内容,必须同时满足这四个条件,才会产生死锁
1.互斥 共享资源只能同时被一个线程占用
2.占有且等待 eg:拿到work锁,不释放的同时去申请money锁
3.不可抢占 线程Thread拿到对象锁X后,其他线程无法抢占X锁
4.循环且等待 线程T1拿到了资源X的锁,去申请Y的锁
线程T2拿到了资源Y的锁,去申请X的锁
JVM层面提供的Synchronized无法解决死锁问题 ,于是就出现了LOCK体系
1.LOCK体系
lock破坏的是死锁中的不可抢占
2.LOCK体系的形式: try - finally代码块中执行
Lock lock = new ReentrantLock();
try{
lock.lock //加锁
}finally{
lock.unlock //解锁
}
3.Lock接口下的三个重要方法
1.响应中断:void lockInterruptibly()
2.支持超时:boolean tryLock(Long time,TimeUnit unit)
3.非阻塞式获取锁:线程若获取不到锁,线程直接退出 boolean tryLock()