1.AQS理解
目前理解:AQS就是一个工具类,提供的是如何安全的获取state的状态值,以及存放阻塞线程的方法,所有能够实现锁的类都是基于AQS,不同的就是state这个状态值的意义,比如对于ReentrantLock这个类来说state=0代表没有被谁占有,而>0代表被锁住了,
2.ReentrantLock的Condition实例(条件)
对于synchronized的锁,线程间的通信主要依靠wait,notify,notifyAll;这是JVM的内部锁;
而对于lock这种显示锁,线程间的通信就是依靠Condition来实现的
//await、signal、signalAll 与 wait、notify、notifyAll相对应
//await---------wait
//signal--------notify
//signalAll------notifyAll相对应
3.线程中断
1.线程中断并不会中断线程的运行,只会让线程根据中断标志,自行处理;
2.线程中断在以下情况下会抛出异常
wait系列方法
join方法
sleep方法
这里可以简单的认为,阻塞的线程调用线程中断方法会抛出异常,之所以要提到这一点是因为之后的一系列的可获取中断锁的类都是利用了这一点特性
4.锁对象
1.synchronized
-- 修饰方法,锁的是这个对象
-- 修饰代码块,锁的是这个对象
--修饰类,锁的是这个类的所有实例
--修饰静态,锁的是这个类的所有实例
2.ReentrantLock
锁的是这个对象,通过对这个对象的state状态,以及是否是当前线程的条件来达到锁的条件,简单的来说就是锁的是在代码中reentrantLock这个对象
网友评论