1 回答
TA貢獻1818條經驗 獲得超7個贊
它用于節省內存。
文檔中的示例:
class Node {
private volatile Node left, right;
private static final AtomicReferenceFieldUpdater<Node, Node> leftUpdater =
AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "left");
private static AtomicReferenceFieldUpdater<Node, Node> rightUpdater =
AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "right");
Node getLeft() { return left; }
boolean compareAndSetLeft(Node expect, Node update) {
return leftUpdater.compareAndSet(this, expect, update);
}
// ... and so on
}
它直接聲明left和right作為Node。并且AtomicReferenceFieldUpdater是static final。
如果沒有AtomicReferenceFieldUpdater,您可能需要將它們聲明為AtomicReference<Node>.
private AtomicReference<Node> left, right;
消耗的內存比Node. 當 有很多實例時Node,它比第一種方法消耗更多的內存。
添加回答
舉報
