Lock也要叫爸爸-LockSupport

Posted jimmyfanhome

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lock也要叫爸爸-LockSupport相关的知识,希望对你有一定的参考价值。

一.简介

  1.定义以及作用:

    用于创建锁和其他同步类的阻塞原语,也就是Lock 的爸爸?

  2.许可(permit):

    LockSupport通过许可(permit)实现挂起线程、唤醒挂起线程功能,有了permit就不会挂起(免死金牌)。

  3.pack与uppack

    pack(阻塞线程):挂起线程,当有permit时,不会挂起,没有时挂起

    unpack(设置线程可用):没有permit时,由于要唤醒,不能没有permit,所以好,释放一个permit来唤醒。有permit时啥都不做啦。

二.具体使用之线程池

  1.线程池的submit方法。  

    当向线程池扔了一个Callable任务时,它会把任务封装成一个FutureTask的任务返回,然后把任务交给线程池处理,下图中的newTaskFor就是返回一个FutureTask。

技术分享图片

  2.future.get()方法

    当主线程调用get方法时,明显,是使用刚刚返回的FutureTask来调用get方法,它会判断一下任务是否已经完成,如果完成了返回结果,否则进入awaitDone方法阻塞等待,这个方法里面其实也是调用了LockSupport的park方法进行挂起阻塞。

  3.FutureTask的run方法

    其实任务的执行就是FutureTask的run方法执行,run方法底层使用了LockSupport的unpark来唤醒线程。

三.原理

  1.park:调用本地方法UNSAFE.park();

  2.unpark:调用本地方法UNSAFE.unpark();

以上是关于Lock也要叫爸爸-LockSupport的主要内容,如果未能解决你的问题,请参考以下文章

hadoop07---synchronized,lock

2018-06-05 沉默的大多数

13.1多进程:进程锁Lock信号量事件

理财基础知识学习

什么是Mac系统的五国问题?这个五国问题到底是什么问题?还有为什么要叫五国问题?

为啥JAVA中的lang包要叫"lang"包?啥意思?