This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
It was generally agreed that SingleThreadModel was a false friend that allowed a servlet developer to believe that they did not need to be concerned about synchronization and threading. Unfortunately this mechanism only makes this true for instance variables of the servlet itself and does not offer any protection for access to sessions, datasources or any other shared resources. As passing parameters between methods via instance variables is hardly best OO practise, there is no real benefit from this interface. However it does result in some significant additional implementation complications for containers.
If you absolutely have to use instance variables, then use synchronized methods or blocks. Writing servlets requires a considerable mental shift from writing single-user, single-Thread applications. I think SingleThreadModel was used because people just had not managed to make that mental shift. Bill
The best way to make your servlets threadsafe is to keep them reentrant by not using any instance variables. If you need to save data for use between requests and your servlet is an HttpServlet, you can save it in the HttpSession.
kktec<br />SCJP, SCWCD, SCJD<br />"What we observe is not nature itself, but nature exposed to our method of questioning." - Werner Heisenberg