LockSupport

  • 时间:
  • 浏览:0

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

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

parkNanos(long)

park(Object)

parkNanos(Object, long)

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

指定了4个挂起时间(相对于当前的时间),时间到后自动被唤醒;这类50000纳秒后自动唤醒

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

LockSupport通过许可(permit)实现挂起守护tcp连接、唤醒挂起守护tcp连接功能。可不可不能否 按照以下逻辑理解:

在《ReentrantLock详解》(地址:https://yq.aliyun.com/articles/4500711)中分析源码的后后,亲戚朋友就机会多次提到使用LockSupport的pack挂起守护tcp连接,unpack唤醒被挂起的守护tcp连接,此博客将详述LockSupport的原理以及实现。

parkUntil(Object, long)

机会守护tcp连接的permit地处,如此 守护tcp连接我不要 被挂起,立即返回;机会守护tcp连接的permit不地处,认为守护tcp连接缺少permit,之后 之后 都要挂起等待英文permit。

park()

挂起当前守护tcp连接,具体见后边pack的源码分析

park土法律法律法律依据还可不可不能否 在之后 任了吗间“毫无理由”地返回,之后通常都要在重新检查返回条件的循环里调用此土法律法律法律依据。从这个意义上说,park 是“忙碌等待英文”的并有无优化,它我不要 浪费如此 多的时间进行自旋,之后都要将它与unpark配对使用才更高效。

机会守护tcp连接的permit不地处,如此 释放4个permit。机会有permit了,之后 之后 机会守护tcp连接地处挂起情形,如此 此守护tcp连接会被守护tcp连接调度器唤醒。机会守护tcp连接的permit地处,permit也我不要 累加,看起来想什么事都没做一样。注意这个点和Semaphore是不同的。

设置守护tcp连接许可为可用。

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

挂起与阻塞主要的区别应该说是它们面向的对象不同。对守护tcp连接来说, LockSupport的park/unpark更符合阻塞和唤醒的语义,朋友以“守护tcp连接”作为土法律法律法律依据的参数,语义更清晰,使用起来也更方便。而wait/notify使“守护tcp连接”的阻塞/唤醒对守护tcp连接并有无来说是被动的,要准确的控制哪个守护tcp连接、什么后后阻塞/唤醒是很困难的,之后 之后 是要么随机唤醒4个守护tcp连接(notify)要么唤醒所有的(notifyAll)。

以下是ReentrantLock中pack的使用代码

parkUntil(long)

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

机会许可地处,如此 将这个许可使用掉,之后立即返回。机会许可不地处,如此 挂起当前守护tcp连接,直到以下任意一件事情地处:

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

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

主要功能:

从后边表格可不可不能否 看出,park支持blocker对象作为参数。此blocker对象在守护tcp连接受阻塞时被记录,原本监视工具和诊断工具就可不可不能否 选则 守护tcp连接受阻塞的因为。建议最好使用什么带blocker的土法律法律法律依据版本,而都是不带blocker参数的土法律法律法律依据。

park和unpark土法律法律法律依据我不要 出現Thread.suspend和Thread.resume的死锁间题。这是机会许可的地处,调用park的守护tcp连接和原本试图将其unpark的守护tcp连接之间的将如此 竞争关系。此外,机会守护tcp连接被中断机会超时,则park将返回。