一个简单的 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);),这意味着我们将其中一个ints转换为第long一个,所以它将是long + int,这给出了 a long。
假设这是一个 Spring 单例 bean,这个类不是线程安全的。如果两个线程调用 addTwoNumbers,那么第一个线程有可能得到第二个线程的计算结果,所以我们可能会得到 2 + 2 = 5。如果结果字段不应该在其他任何地方使用,则应该去掉它
public class Calculator {
public int addTwoNumbers(int first, int second) {
return first + second;
}
}