它来自java.util.concurrent.ConcurrentLinkedQueue.java
private static class Node<E> { volatile E item; volatile Node<E> next; /** * Constructs a new node. Uses relaxed write because item can * only be seen after publication via casNext. */ Node(E item) { UNSAFE.putObject(this, itemOffset, item); } }
在评论和构造函数的上下文中,我理解为:
从一般观点构造函数不安全,因为字段不是final
,并且可能会发布半初始化对象。但是在这里,我们可以控制它,我们可以确保没有这种可能性,是吗?
在构造函数中,UNSAFE
put field放宽了volatile的含义 - 我们放宽了易失性存储/排序约束。但是,由于读取程序的其他部分(例如),该字段是不稳定的,是吗?