java - Spring Controller 线程安全

标签 java spring servlets spring-mvc

我的问题是关于 Spring Controller 上的线程安全(最后是 Servlet 类)。

1)如果我定义一个varibale static final int i =0,会导致线程安全问题,但是,我已经声明了static和final 2)如何将 enum 声明为全局变量(如 protected enum Mytype{start, stop})? 3)decalring @Autowired 是线程安全的吗?

我找到了一篇关于此的好文章,但我需要更清楚地了解上述问题。 Refer

代码:

@Controller
Public class Test{
@Autowired MyTest mt;  // Autowired, thread safe?
private final String s = "abc"; // final, threadsafe?
private static final int i =0; // again final threadsafe?
private static int x = 0; // only static threadsafe?    
protected enum Mytype{head, tail}; // enum, threadsafe?
.....
}

最佳答案

这与其说是一个 Spring 问题,不如说是一个一般的多线程问题。除了我们可以假设 Controller 是一个急切实例化的单例(这意味着在这种情况下静态和非静态变量之间实际上没有区别)之外,您所问的问题都不是特定于 Spring 的。另外,@Autowired 与线程安全无关。在您的示例中,这只是一个非最终包私有(private)字段(因为这是默认值)。

话虽如此,任何引用不可变对象(immutable对象)(如字符串)或基元的最终变量本质上都是线程安全的,因为它无法更改

如果多个线程可以访问一个变量,并且该变量的值可以更改,那么它就不是线程安全的,除非发生某种形式的同步。

关于java - Spring Controller 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16991480/

相关文章:

java - 反转两个索引之间的数组部分

java - 将双向实体方法与 Mapstruct 结合使用

java - 作为服务与大型 java 程序交互?

java - 在 Java 中查询具有完全匹配字段 MongoDB 的数组元素

java - org.apache.ibatis.builder.IncompleteElementException : Could not find result map . 为什么?

java - 如何正确使用MapStruct @Mapping和@Mappings?

spring - Spring 基于注释的验证中的和/或条件

java - 配置现有 Tomcat6 和 Eclipse 时遇到问题

jsp - 尽管在 web.xml 中配置了异常类型,但仍未显示错误页面

javascript - RequestDispatcher 转发到已加载的 JSP