放松易变的领域

时间:2017-09-19 20:08:52

标签: java-memory-model

它来自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);
    }
}

在评论和构造函数的上下文中,我理解为:

  1. 一般观点构造函数不安全,因为字段不是final,并且可能会发布半初始化对象。但是在这里,我们可以控制它,我们可以确保没有这种可能性,是吗?

  2. 在构造函数中,UNSAFE put field放宽了volatile的含义 - 我们放宽了易失性存储/排序约束。但是,由于读取程序的其他部分(例如),该字段是不稳定的,是吗?

0 个答案:

没有答案