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