在写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方法进行线程同步。