What is the difference between static variables and instance variables in a servlet?
Created May 4, 2012
According to the Servlet specification, a servlet that does not declare SingleThreadModel usually has one and only one instance, shared among all concurrent requests hitting that servlet.
That means that, in servlets (and other multithreaded applications), an instance variable behaves very much like a static variable, since it is shared among all threads. You have to be very careful about synchronizing access to shared data.
The big difference between instance variables and static variables comes when you have configured your servlet engine to instantiate two instances of the same servlet class, but with different init parameters. In this case, there will be two instances of the same servlet class, which means two sets of instance variables, but only one set of static variables.
Remember that you can store data in lots of different places in a servlet. To wit:
(In the case of SingleThreadModel, there may be many instances of the same servlet class even with the same init parameters. SingleThreadModel is confusing and usually unnecessary.)
See How do I ensure that my servlet is thread-safe? for more detail.