2016-09-19 77 views
0

我當前的方法:併發訪問安全

private int getStatusCode(String path) throws IOException { 
    HttpClient client = HttpClients.createDefault(); 
    HttpGet method = new HttpGet(path); 
    HttpResponse httpResponse = client.execute(method); 
    return httpResponse.getStatusLine().getStatusCode();   
} 

我希望把它放在一個春天@Service類。然後我想使用該類作爲@Autowired。我知道Spring bean是單身人士,所以我只有一個自動裝配類的實例。我有不同的@Controller類使用該服務。在我的情況下併發訪問是否會造成問題?例如從另一個請求覆蓋路徑?

回答

0

在我的情況下併發訪問是否會造成問題?

雖然這是一個單身,TT不會造成任何併發問題,因爲該方法getStatusCode只使用傳遞給方法的參數

  • 對象(例如:字符串路徑)
  • 在方法中創建的對象。

例如從另一個請求覆蓋路徑?

不是問題,因爲每個方法調用將來自不同的線程,並且方法的參數(如路徑變量)存儲在堆棧中,而每個線程都是不同的。

作爲一個實時的例子,我們看看Servlet。無論請求數量多少,Servlet容器都只創建一個servlet實例。所有的請求線程都通過將自己的HttpServletRequestHttpServletResponse對象傳遞給上述方法來訪問這個servlet實例的方法(doGet(...) or doPost(...)),並且它不會導致混淆請求/響應。