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,它比第一种方法消耗更多的内存。
添加回答
举报