gpt4 book ai didi

java - Singleton 类中的非静态成员

转载 作者:行者123 更新时间:2023-11-29 09:32:18 24 4
gpt4 key购买 nike

我正在做一个单例类,如下所示。

public class SingletonTest {

private static SingletonTest instance;

private Integer result;

private SingletonTest() {
}

public synchronized static SingletonTest getInstance(){
if(instance == null){
instance = new SingletonTest();
}
return instance;
}

public Integer calculateResult(int value1, int value2) {
result = value1 + value2;
return result;
}
}

但是当我从多个线程(使用 JMeter)调用非静态成员时出现问题。

举例:

线程 1:SingletonTest.getInstance().calculateResult(1,2) -> 返回 3

线程 2:SingletonTest.getInstance().calculateResult(3,2) -> 返回 3

我认为发生这种情况是因为 2 个线程同时访问方法并覆盖名为结果的属性。

最佳答案

你是对的,第二个线程正在访问第一个线程的结果集的值。

如果你正在修改一个对多个线程可见的值,你应该同步操作。

public synchronized Integer calculateResult(int value1, int value2) {
result = value1 + value2;
return result;
}

这样,第一个调用该方法的线程将锁定单例,第二个线程在完成之前无法访问它。

您可能应该查看 official tutorials如果你打算使用并发,尤其是 this .

关于java - Singleton 类中的非静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22766709/

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