发布网友 发布时间: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,重排序在说什么,指令重排?你得先知道什么时候才会重排好吧