JUC-LockSupport


AQS的基础,线程阻塞、唤醒的底层基础

有个凭证的概念

面试题

为什么可以先唤醒线程后阻塞线程?

因为unpark获得了一个凭证,之后再调用park方法,就可以名正言顺的凭证消费,故不会阻塞。

为什么唤醒两次后阻塞两次,但最终结果还会阻塞线程?

因为凭证的数量最多为1(不能累加),连续调用两次 unpark和调用一次 unpark效果一样,只会增加一个凭证;而调用两次park却需要消费两个凭证,证不够,不能放行。

AQS的基础,线程阻塞、唤醒的底层基础

基础方法

  • parkXXX():阻塞当前线程
    • 增加了park(blockerObject): 用于可以获取阻塞在等待的对象,便于排查问题
  • unpark(Thread):唤醒指定线程

易错点:

1、先unpark,后park,会怎样

参考:

1、https://blog.csdn.net/xushiyu1996818/article/details/103528041


文章作者: 王利康
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王利康 !
  目录