一个简单的 Calculator 类,在 Web 应用程序中连接为 Spring bean:
public class Calculator {
int result;
public int addTwoNumbers(int first, int second) {
result = first + second;
return result;
}
}
这可能会出现什么问题?
多线程问题。默认情况下,Spring bean 是单例的。
整数溢出是另一个问题,如果这很重要的话。
要解决它,您可以long
改为返回:
long result;
public long addTwoNumbers(int first, int second)
{
result = (long)first + second;
return result;
}
只说 时要小心result = first + second;
,因为int
将添加两个 ,给出一个int
(可能溢出),然后才将其转换为 a long
。
result = (long)first + second;
等价于result = ((long)first) + second;
(not result = (long)(first + second);
),这意味着我们将其中一个int
s转换为第long
一个,所以它将是long + int
,这给出了 a long
。
假设这是一个 Spring 单例 bean,这个类不是线程安全的。如果两个线程调用 addTwoNumbers,那么第一个线程有可能得到第二个线程的计算结果,所以我们可能会得到 2 + 2 = 5。如果结果字段不应该在其他任何地方使用,则应该去掉它
public class Calculator {
public int addTwoNumbers(int first, int second) {
return first + second;
}
}