1. Multi threaded model: the container holds a single instance of a servlet, but executes the service() method in separate threads, one for every request.
2. Single threaded model: the container still holds a single instance of a servlet, and the servlet implements SingleThreadModel; virtually, this means that the service() method is synchronized, so if you have multiple requests, they will have to stay in line. Using this model is generally a bad practice, as a result the interface is now deprecated.
My guess is you used instance variables in your servlets. If you use them in the service() method (and the servlet is not single threaded), the operations are not thread safe (remember, you have only one instance on the container, but multiple requests).