Java-多线程并发之锁原理

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。就可以获取有关阻塞的信息。

Java-多线程并发之锁原理

 

 Thread类里边有个变量  volatile Object  parkBlocker.  就是用来存放blocker对象的

5.parkNanos(Object blocker,long nanos)

相比park(Object blocker)多了一个超时的时间

6.parkUntil(Object blocker,long deadline) 这个deadline是一个随机的时间。

 

抽象同步队列AQS:AbstractQueueSynchronizer,同步器的基础组件。

 

上一篇:以C#形式实施标尺


下一篇:【Java 并发编程系列】【J.U.C】:LockSupport