我的构造函数中添加到易失性链表中的项目可能对其他线程不可见,这是正确的吗?
class ProductPrice {
private volatile LinkedList<QuantityPrice> quantityPriceList;
public ProductPrice(List<QuantityPrice> quantityPriceListParam) {
this.quantityPriceList = new LinkedList<QuantityPrice>();
quantityPriceList.addAll(quantityPriceListParam);
}
}
以下代码,在列表加载完成后再为 volatile 变量赋值,这样能解决问题吗?因为所有的 happen-before 操作也会被可见。
private volatile LinkedList<QuantityPrice> quantityPriceList;
public ProductPrice(List<QuantityPrice> quantityPriceListParam) {
LinkedList<QuantityPrice> tempQuantityLinkedList = new LinkedList<QuantityPrice>();
tempQuantityLinkedList.addAll(quantityPriceListParam);
this.quantityPriceList = tempQuantityLinkedList;
}
在这种情况下,我只需要将变量声明为final,就可以获得相同的效果,即使所有项对其他线程可见。
private final LinkedList<QuantityPrice> quantityPriceList;
public ProductPrice(List<QuantityPrice> quantityPriceListParam) {
LinkedList<QuantityPrice> tempQuantityLinkedList = new LinkedList<QuantityPrice>();
tempQuantityLinkedList.addAll(quantityPriceListParam);
this.quantityPriceList = tempQuantityLinkedList;
}
quantityPriceList
为空。 - John Vint