在单例类中同时调用方法

时间:2016-05-10 04:53:09

标签: java concurrency singleton

假设我创建了一个名为Calculator的单例类,其方法添加了2个参数。

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同时说10,000次,会不会有任何问题?

案例2: 如果这个类不是单例,而是普通类,那么如果我做同样的事情会同时调用它会发生什么。

案例3: 现在,如果我的类不是单例,并且我的add方法是静态方法,那么如何使用内存?

所以我怀疑它是如何表现的,给定场景中的Java内存模型是什么。哪个有效或推荐一个?能帮助我理解这个吗?

2 个答案:

答案 0 :(得分:3)

  

案例1:既然它是单身人士,如果我们打电话会有任何问题   同时添加方法说10,000次?

这里没有并发问题:方法add没有任何副作用(它不会改变对象的状态)。

  

案例2:如果这个类不是单例,那么普通类则是什么   如果我做同样的事情,同时调用它会发生。

与前一个答案相同。

  

案例3:现在,如果我的班级不是单身,而且我的加法是一个   静态方法然后如何使用内存?

与前两个相同的答案:方法是否为静态无关紧要,每次使用两个参数调用它时,它将对这些参数执行计算而不更改实例/类的状态。

  

所以我怀疑它是如何表现的,什么是Java内存模型   给定方案。哪个有效或推荐一个?请你   帮助我理解这个?

同样,没关系。不存在并发问题,因为没有修改状态。这与并发性或与JMM无关。

答案 1 :(得分:-1)

如果方法同时调用则没有问题。对于你的所有情况,没有问题。 没有并发问题,因为没有修改状态。所以没有什么会影响。

如果想要在多线程环境中访问它,那么您需要将其设置为synchronised以保证线程安全。