在寫Servlet需要注意線程的安全問題。
Person類
package top.cheungchingyin.thread;
public class Person {
public int age;
}
Demo類
package top.cheungchingyin.thread;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Demo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Person p = new Person();
p.age++;
System.out.println(p.age);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
當我在Demo類裡面通路Person類時,需要new一個新的對象,當doGet方法執行完後則會把對象釋放,回收記憶體,是以無論怎樣并發通路也不會出現安全問題,更不會記憶體洩露。可是如果當我的Person類是一個靜态類,由于靜态類在JVM虛拟機裡面起動時便會放入記憶體中,當伺服器啟動,不斷地通路Person靜态類,則會容易記憶體洩露。是以使用靜态類的時候需要特别小心,使用完後記得釋放記憶體。或者可以使用synchronized方法進行線程同步。