Win a copy of Re-engineering Legacy Software this week in the Refactoring forum
or Docker in Action in the Cloud/Virtualization forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

SingleThreadModel

 
Veda Dhawad
Greenhorn
Posts: 4
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
In the Servlet 2.4 specification SingleThreadModel has been deprecated, why?
 
Debashish Chakrabarty
Ranch Hand
Posts: 231
Firefox Browser Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This article has summed it up nicely:
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.
 
jyothi godavarthy
Ranch Hand
Posts: 135
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Then whats the best alternative to make the instance variables thread safe.
 
William Brogden
Author and all-around good cowpoke
Rancher
Posts: 13056
6
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
 
Ken Krebs
Ranch Hand
Posts: 451
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic