一个简单的Calculator类,它在Web应用程序中连接为Spring bean:
public class Calculator {
int result;
public int addTwoNumbers(int first, int second) {
result = first + second;
return result;
}
}
这可能会出现什么问题?
答案 0 :(得分:31)
多线程问题。默认情况下,Spring bean是单例。
答案 1 :(得分:13)
整数溢出是另一个问题,如果这很重要。
要解决此问题,您可以改为long
:
long result;
public long addTwoNumbers(int first, int second)
{
result = (long)first + second;
return result;
}
小心点result = first + second;
,因为将添加两个int
,给出int
(可能会溢出),然后只会转换为{ {1}}。
long
相当于result = (long)first + second;
(不是result = ((long)first) + second;
),这意味着我们首先将result = (long)(first + second);
之一转换为int
,因此它将是long
,其中包含long + int
。
答案 2 :(得分:7)
假设这是一个Spring单例bean,这个类不是Thread安全的。如果两个线程调用addTwoNumbers,第一个线程有可能得到第二个线程的计算结果,那么我们可能得到2 + 2 = 5.如果结果字段不应该在其他任何地方使用它应该被删除
public class Calculator {
public int addTwoNumbers(int first, int second) {
return first + second;
}
}