LockSupport工具类:
主要用于挂起和唤醒线程,是创建锁和其他同步类的基础。
每个使用LockSupport的线程会和他关联一个许可证。
主要功能由Unsafe类实现:
1.park():如果已经拿到了许可证,就返回。没有拿到就阻塞。不会抛异常。
2.unpark(Thread thread):1) 无条件下调用,如果传入的线程没有许可证,就给许可证。 2) 如果线程调用了park被挂起就被唤醒。
最好对park进行判断,因为这个方法不会抛异常。也不会告诉你为什么park被返回了。
3.parkNanos(long nanos):与park类似。 拿到许可证就返回,如果没有拿到就在nanos时间后自动返回。
4.park(Object blocker):当调用park被挂起时会记录到线程内部。用诊断工具getBlock(Thread),可以把block设置成this。就可以获取有关阻塞的信息。
Thread类里边有个变量 volatile Object parkBlocker. 就是用来存放blocker对象的
5.parkNanos(Object blocker,long nanos)
相比park(Object blocker)多了一个超时的时间
6.parkUntil(Object blocker,long deadline) 这个deadline是一个随机的时间。
抽象同步队列AQS:AbstractQueueSynchronizer,同步器的基础组件。