gpt4 book ai didi

java - 不同的Java对象引用相同的内存位置?

转载 作者:行者123 更新时间:2023-12-02 09:00:29 25 4
gpt4 key购买 nike

这可能是一个新手问题,但我找不到原因。我有一个RetryOnException类来控制某些任务的重试次数。我有不同的任务要控制,因此我创建了此类的不同对象。

问题是,如果我调用errorOccured()一个对象的numberOfTriesLeft我所有的对象都改变了。在我看来,所有对象都只是引用同一个对象。

这种情况怎么会发生以及如何解决?

@Component
public class RetryOnException {

private int numberOfRetries; // retries
private int numberOfTriesLeft; // retries
private long timeToWait; // PauseMs

@Autowired
public RetryOnException(@Value("${exception.retries}") int numberOfRetries,
@Value("${exception.pauseMs}") long timeToWait) {
this.numberOfRetries = numberOfRetries;
this.numberOfTriesLeft = numberOfRetries;
this.timeToWait = timeToWait;
}

@Value("${exception.retries}")
private int defaultRetries;

/**
* @return true if there are tries left
*/
public boolean shouldRetry() {
return numberOfTriesLeft > 0;
}

public void errorOccured() throws Exception {
numberOfTriesLeft--;
if (!shouldRetry()) {

throw new Exception("Retry Failed: Total " + numberOfRetries
+ " attempts made at interval " + getTimeToWait()
+ "ms");
}
waitUntilNextTry();
}

public long getTimeToWait() {
return timeToWait;
}

private void waitUntilNextTry() {
try {
Thread.sleep(getTimeToWait());
} catch (InterruptedException ignored) {
}
}

public void resetRetryCount() {
numberOfTriesLeft = defaultRetries;
}

}

最佳答案

您似乎正在使用 Spring IoC 容器来创建 RetryOnException 对象。请注意,bean 的默认范围是 singletone 。这意味着 bean 实例在您的应用程序中共享。

关于java - 不同的Java对象引用相同的内存位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60207927/

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