码迷,mamicode.com
首页 > 其他好文 > 详细

Lock也要叫爸爸-LockSupport

时间:2018-11-06 19:40:54      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:同步   run方法   释放   没有   原理   阻塞   ima   通过   src   

一.简介

  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

标签:同步   run方法   释放   没有   原理   阻塞   ima   通过   src   

原文地址:https://www.cnblogs.com/JimmyFanHome/p/9916924.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!