java原子属性正确的getter和setter是什么

问题描述 投票:0回答:1

我在 Java 中有一个原子布尔属性

private AtomicBoolean endOfInputDataSet;

该属性的正确 getter 和 setter 是什么?每种选择的后果是什么?我可以直接退货

AtomicBoolean

public AtomicBoolean getEndOfInputDataSet() {
    return this.endOfInputDataSet;
}

public void setEndOfInputDataSet(AtomicBoolean endOfInputDataSet) {
    this.endOfInputDataSet = endOfInputDataSet;
}

或者我可以退回未包装的

boolean
:

public boolean getEndOfInputDataSet() {
    return this.endOfInputDataSet.get();
}

public void setEndOfInputDataSet(boolean endOfInputDataSet) {
    this.endOfInputDataSet.set(endOfInputDataSet);
}

我认为后一种解决方案只是让客户端使用更简单,更干净,但是为什么IntelliJ生成getter和setter时不是默认的?

java atomic getter-setter
1个回答
0
投票

私有 AtomicBoolean 输入数据集结束;

制作该

final
以防止另一个
AtomicBoolean
取代原来的。

返回 this.endOfInputDataSet;

原子…对象是携带有效负载的容器,同时提供对该有效负载的线程安全访问。

此行返回对该容器的引用。然后,调用程序员可以获取或设置该有效负载的内容。

this.endOfInputDataSet = endOfInputDataSet;

这条线破坏了你的场景。您使调用程序员能够替换您的容器。

返回 this.endOfInputDataSet.get();

此行返回容器内容的副本。

请注意,这一行的方法返回“旧消息”。在

get()
调用结束和调用程序员实际收到值之间有一个时间节拍。在此节拍期间,另一个线程可能在原子容器上执行了
set
,从而更改了容器的内容。您已撤消“Atomic
in
AtomicBoolean”。这段代码不是线程安全的。

this.endOfInputDataSet.set(endOfInputDataSet);

这一行是非原子且线程不安全的,与上面的行一样。

© www.soinside.com 2019 - 2024. All rights reserved.