AQS-为什么队列头节点的Thread是null

AQS面试 专栏收录该内容
23 篇文章 2 订阅

如果是队列刚刚初始化的头节点,是这样的:

在这里插入图片描述
在这里插入图片描述
可以发现这Node类的构造函数没做任何赋值,而Node类中有一个属性是Thread
在这里插入图片描述
那既然没赋值,thread对象就肯定是null了。所以队列初始化的头节点的Thread是null。

如果队列已经初始化完成,头节点设置如下:

在这里插入图片描述
在这里插入图片描述
可以发现设置新的头节点时,新的头节点的thread也会被设置为null。

那为什么队列头节点的Thread要是null呢?

这里可以这样去理解,头节点是不参与排队的,因为它已经获得了同步状态了,那么就说明该头节点的相关线程已经在执行相应的业务逻辑了,而在执行完业务逻辑,释放同步状态后,该头节点是肯定要被垃圾回收的,防止内存空间的浪费,这里就涉及到了gc root,如果对象还有引用的话,垃圾回收器是不会回收它的,所以需要把头节点持有的各种引用都置为null,方便之后的垃圾回收,而Thread也是头节点持有的引用之一,因此Thread对象也需要被置为null。

  • 2
    点赞
  • 1
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 点我我会动 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值