LinkedBlockingQueue中head,last字段没有被final修饰如何保证初始化安全...

发布网友 发布时间:2022-04-25 12:16

我来回答

2个回答

热心网友 时间:2022-04-08 20:13

final修饰的字段是表示不能修改的。
这里的last明显不是不能修改的。
问题描述中担心的last可能为null,其实在整个对象实例化是已经为last赋值一个不为null的对象。而后续的赋值也都是保证不为null的。
如果有帮助到你,请点击采纳。追问那你怎么保证last在初始化的时候不被重排序到构造函数之外

热心网友 时间:2022-04-08 21:31

1,head和last是用来表示头节点和尾节点的,初始化时队列里本来就没东西,这里赋值一个数据为null的节点,至少保证此时head和last引用本身不为null,但是data是null,这是没问题的
2,final跟线程安全没啥关系,final产生不可变,修饰对象表示对象引用不可变,这里肯定不可能final,因为head和last是表示队列头尾节点,都是可能变化的
3,安不安全要看访问是不是有竞争。访问head和last本身在外面就已经上锁了,在这个jvm里就是线程安全的
4,重排序在说什么,指令重排?你得先知道什么时候才会重排好吧

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com