Why instance variable in Servlet is not thread-safe
instance-variables, jakarta-ee, java, servlets, thread-safety
Solution
The mistake you are making is here:
So, because all these threads create a new class instance for ActionServlet, so I don't see any problem here. because instances of these thread is separate of each other.
The container does not create a new instance of the Servlet class for each request. It reuses an existing one. This is why they are not thread safe.
The Stripes Action Framework DOES create a new instance for each request, so that's an okay assumption under that framework. However, for example, Struts 1 follows the Servlet model and does not create a new action per request.
That does not mean that the container is limited to a single instance, it in theory can create more than one, but it's not a specified behavior so can not be relied upon. Most of the popular ones do not.
Problem
When I read `Head First Servlet and JSP`, they say that instance variable is non-thread safe. I don't understand this statement so much. For example: I have a servlet which name is `ActionServlet.java`. Each time, each user's request is sent to server, container will create a new thread and create new `ActionServlet` instance. `ActionServlet` may be has a structure: ``` public class ActionServlet extends HttpServlet { // example of instance variable Instance variable; public void processRequest(HttpServletRequest request, HttpServletResponse response) { // process something relating to instance variable } } ``` So, because all these threads create a new class instance for `ActionServlet`, so I don't see any problem here. because instances of these thread is separate of each other. Please figure out where problem when use instance variable in multithread environment. Thanks :)