Obviously, the user agent can be different for a different client request. So how can you count on the output being correct? Couldn't another client make another request which starts another thread, and then couldn't the second thread set the output to something else before the output in the first thread can be displayed?
Originally posted by Bear Bibeault: Each request, running in its own thread, gets its own HttpServletRequest and HttpServletResponse instances and output buffer. You don't need to worry about them overlapping.
Yes, I knew that part. Let me see if this is a better example of what is confusing me:
int x = 20; x = 10; response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<div>" + x + "</div>");
How do you know a 2nd thread won't be assigning 20 to x, just before this thread adds the value of x to the response? I don't see how setting x = 10 is isolated inside one particular request; it's inside the servlet's doPost() method, which all the threads access. [ October 10, 2006: Message edited by: sven studde ]
To add to Ben's excellent post, that's the way Java threading works. Variables that are local to a method are allocated on a per-thread basis. You never have to worry abouth thread-safety with variables declared inside a method.
Well, I was hoping to be enlightened with a rule that when applied to instance variables and servlet context attributes resulted in them being not thread safe, yet when the rule was applied to local service method variables it resulted in those variables being thread safe. But if the rule is "that's the way it is", then I guess it's just memorization, and there's no logic behind it. [ October 10, 2006: Message edited by: sven studde ]