LockSupport

  • 时间:
  • 浏览:1
  • 来源:大发彩神在线计划—大发彩神计划怎么来的

parkUntil(Object, long)

LockSupport中pack有多个版本,如下所示:

挂起与阻塞主要的区别应该说是它们面向的对象不同。对多守护进程 来说, LockSupport的park/unpark更符合阻塞和唤醒的语义,大伙以“多守护进程 ”作为最好的方式 的参数,语义更清晰,使用起来也更方便。而wait/notify使“多守护进程 ”的阻塞/唤醒对多守护进程 五种来说是被动的,要准确的控制哪个多守护进程 、有哪些后后 阻塞/唤醒是很困难的,也不是要么随机唤醒原来多守护进程 (notify)要么唤醒所有的(notifyAll)。

以下伪代码是pack的常用模型。

park()

指定了原来挂起时间(相对于当前的时间),时间到后自动被唤醒;之类30000纳秒后自动唤醒

而且许可处在,这样将你这一 许可使用掉,而且立即返回。而且许可不处在,这样挂起当前多守护进程 ,直到以下任意一件事情处在:

主要功能:

和parkUntil(Object, long)之类,仅少了blocker相关的操作

parkNanos(long)

设置多守护进程 许可为可用。

park最好的方式 还都可以在你这一 任了吗间“毫无理由”地返回,而且通常还要在重新检查返回条件的循环里调用此最好的方式 。从你这一 意义上说,park 是“忙碌停留”的五种优化,它不不浪费这样多的时间进行自旋,而且还要将它与unpark配对使用才更高效。

parkNanos(Object, long)

parkUntil(long)

LockSupport通过许可(permit)实现挂起多守护进程 、唤醒挂起多守护进程 功能。都可以按照以下逻辑理解:

LockSupport是用于创建锁和你这一 同步类的阻塞原语。以下是jdk对LockSupport的描述。

从中间表格都可以看出,park支持blocker对象作为参数。此blocker对象在多守护进程 受阻塞时被记录,原来监视工具和诊断工具就都可以选泽 多守护进程 受阻塞的意味。建议最好使用有有哪些带blocker的最好的方式 版本,本来不是 不带blocker参数的最好的方式 。

park(Object)

以下是ReentrantLock中pack的使用代码

和park(Object)相比少了挂起前为多守护进程 设置blocker、被唤醒后清理blocker的操作。

Basic thread blocking primitives for creating locks and other synchronization classes.

在《ReentrantLock详解》(地址:https://yq.aliyun.com/articles/4300711)中分析源码的后后 ,大伙就而且多次提到使用LockSupport的pack挂起多守护进程 ,unpack唤醒被挂起的多守护进程 ,此博客将详述LockSupport的原理以及实现。

挂起当前多守护进程 ,具体见中间pack的源码分析

park和unpark最好的方式 不不再次经常出现Thread.suspend和Thread.resume的死锁什么的问题。这是而且许可的处在,调用park的多守护进程 和原来试图将其unpark的多守护进程 之间的将这样竞争关系。此外,而且多守护进程 被中断而且超时,则park将返回。

指定原来挂起时间(绝对时间),时间到后自动被唤醒;之类2018-02-12 21点整自动被唤醒。

而且多守护进程 的permit不处在,这样释放原来permit。而且有permit了,本来而且多守护进程 处在挂起情况报告,这样此多守护进程 会被多守护进程 调度器唤醒。而且多守护进程 的permit处在,permit而且会累加,看起来想有哪些事都没做一样。注意你这一 点和Semaphore是不同的。

和parkNanos(Object, long)之类,仅少了blocker相关的操作

而且多守护进程 的permit处在,这样多守护进程 不不被挂起,立即返回;而且多守护进程 的permit不处在,认为多守护进程 缺少permit,本来还要挂起停留permit。