Servlet线程安全问题

Servlet线程安全问题

明确: Servlet的设计是一个单实例多线程。

线程安全要求将变量创建成一个局部变量,而不要创建成成员变量.


线程同步问题解决:

Servlet是一个单实例多线程。

以前的做法,现在已被废除了

Implements SingleThreadModel

多实例:一个线程过来就创建一个

解决的办法:不要在类中去创建实例变量(成员变量),如果创建了就不要在doGet和doPost方法里修改它,把变量创建为局部变量。


import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.SingleThreadModel;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//演示线程安全问题
public class ServletDemo7 extends HttpServlet{
	
	int a = 0 ;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println(Thread.currentThread().getName() + "进来了");
		a++ ;
		System.out.println(Thread.currentThread().getName() + ":" + a);
		try {
			Thread.sleep(5000) ;
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println(Thread.currentThread().getName() + ":" + a);
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}


你可能感兴趣的:(JavaWeb)