假设我已经创建了一个名为calculator的单例类,它的add方法包含两个参数。
public class Calculator {
private static Calculator instance = new Calculator();
public static Calculator getInstance() {
return instance;
}
public int add(int num1, int num2) {
return num1 + num2;
}
}
案例1:既然是单例,那么调用这个方法会有什么问题吗 add
同时说一万次?
案例2:如果这个类不是单例的,并且是一个普通的类,那么如果我同时调用它,会发生什么呢。
案例3:如果我的类不是单例,如果我的add方法是静态方法,那么内存将如何使用?
所以我的疑问是它的行为,给定场景中的java内存模型是什么。哪个是有效的还是推荐的?你能帮我理解这个吗?
2条答案
按热度按时间wydwbb8l1#
如果同时调用该方法,则没有问题。你的案子没有问题。不会有并发问题,因为没有修改任何状态。所以不会有什么影响。
如果您想在多线程环境中访问它,那么您需要将其设置为
synchronised
线程安全。mtb9vblg2#
案例1:既然是单例,那么如果我们同时调用add方法,比如10000次,会有什么问题吗?
这里没有并发问题:方法
add
没有任何副作用(不会改变对象的状态)。案例2:如果这个类不是单例的,并且是一个普通的类,那么如果我同时调用它,会发生什么呢。
和上一个答案一样。
案例3:如果我的类不是单例,如果我的add方法是静态方法,那么内存将如何使用?
与前两个答案相同:不管方法是静态的还是非静态的,每次使用这两个参数调用它时,它都会对这些参数执行计算,而不会更改示例/类的状态。
所以我的疑问是它的行为,给定场景中的java内存模型是什么。哪个是有效的还是推荐的?你能帮我理解这个吗?
再说一遍,没关系。不会有并发问题,因为没有修改任何状态。这与并发或jmm无关。