1.成因
線程安全問題都是由全局變量及靜態變量引起的。但是,如果每個線程中對全局變量、靜態變量只有讀操作,而無寫操作,一般來說,這個全局變量是線程安全的;如果有多個線程同時執行寫操作,一般都需要考慮線程同步,否則就可能影響線程安全。
- 常量始終是線程安全的,因為只存在讀操作。
- 每次調用方法前都新建一個實例是線程安全的,因為不會訪問共享的資源。
- 局部變量是線程安全的。因為每執行一個方法,都會在獨立的空間創建局部變量,它不是共享的資源。局部變量包括方法的參數變量和方法內變量。
2. controller總的變量
在controller總使用 private HttpRequest request;如果多個請求同時訪問這一個controller時候會產生線程安全問題,因為用的是同一個request對象,如果使用 @Autowired注解注入 HttpRequest的話,就使用的同一個request對象,因為在spring啟動的時候,就會初始化request對象,所有request使用的是同一個request.