标签:同步 run方法 释放 没有 原理 阻塞 ima 通过 src
用于创建锁和其他同步类的阻塞原语,也就是Lock 的爸爸?
LockSupport通过许可(permit)实现挂起线程、唤醒挂起线程功能,有了permit就不会挂起(免死金牌)。
pack(阻塞线程):挂起线程,当有permit时,不会挂起,没有时挂起
unpack(设置线程可用):没有permit时,由于要唤醒,不能没有permit,所以好,释放一个permit来唤醒。有permit时啥都不做啦。
当向线程池扔了一个Callable任务时,它会把任务封装成一个FutureTask的任务返回,然后把任务交给线程池处理,下图中的newTaskFor就是返回一个FutureTask。
当主线程调用get方法时,明显,是使用刚刚返回的FutureTask来调用get方法,它会判断一下任务是否已经完成,如果完成了返回结果,否则进入awaitDone方法阻塞等待,这个方法里面其实也是调用了LockSupport的park方法进行挂起阻塞。
其实任务的执行就是FutureTask的run方法执行,run方法底层使用了LockSupport的unpark来唤醒线程。
1.park:调用本地方法UNSAFE.park();
2.unpark:调用本地方法UNSAFE.unpark();
标签:同步 run方法 释放 没有 原理 阻塞 ima 通过 src
原文地址:https://www.cnblogs.com/JimmyFanHome/p/9916924.html