2015-04-20 72 views
1

嗨我已經在servlet中創建了一個私有方法。 該方法將從post方法中調用。我的問題是,它會是線程安全的嗎?因爲它會被許多用戶通過ajax調用?在POST方法之外創建方法是servlet

protected void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
    callPrivateMethod(); 
} 

private static void callPrivateMethod(){ 
} 
+0

顯示的代碼將由多個線程同時執行。如果線程安全或不依賴於您將在callPrivateMethod()中執行的操作。你在做什麼/防止什麼? –

回答

2

只要callPrivateMethod()是線程安全的,即它不使用類成員變量,那麼你會沒事的。

0

不,您的私有方法將不會線程安全,因爲doPost在servlet中不是線程安全的。

0

它是不可變對象爲在你的情況(無參數)參數的靜態方法是線程安全的

0

Servlet的應該是無狀態的。 Hawever,如果你需要使用類成員或任何其他線程不安全的元素,你總是可以使用「同步」的句子。

0

在加載時,servlet僅實例化一次。如果您想調用callPrivateMethod()線程安全,則可以將其放入同步塊中。

private Object mutex = new Object(); 

protected void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
    synchronized (mutex){ 
    callPrivateMethod(); 
    } 
} 

private static void callPrivateMethod(){ 
}