gpt4 book ai didi

java volatile与java链表一起使用

转载 作者:搜寻专家 更新时间:2023-11-01 02:25:33 25 4
gpt4 key购买 nike

我在我的构造函数中添加到我下面的可变链表的项目可能对其他线程不可见是否正确

class ProductPrice {
private volatile LinkedList<QuantityPrice> quantityPriceList;
public ProductPrice(List<QuantityPrice> quantityPriceListParam) {
this.quantityPriceList = new LinkedList<QuantityPrice>();
quantityPriceList.addAll(quantityPriceListParam);
}
}

我在加载列表后分配 volatile 变量的以下代码是否可以解决问题。因为所有发生在操作之前的操作也将是可见的。

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;
}

最佳答案

Is it correct that the items that I added in my constructor to my volatile linked list below may not be visible to other threads

如果列表是非空的,那么所有对列表的写入都是可见的。存在一种竞争条件,其中默认写入 (null) 可能对看到非 null ProductPrice 的线程可见。如果该字段是最终的,则情况并非如此。

and in this case could i just make the variable final and get the same effect of having all items visible to other threads.

是的,这是最好的解决方案。

关于java volatile与java链表一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24496364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com