I've been reading on servlets and I'm still confused with the basics.
only 1 instance of servlet services multiple client requests. Is there a situation when it creates multiple instances?
When a client makes a connection for a servlet, an instance of the servlet class is created and the new thread uses it to service the request.
Container does not create new instance of the servlet for each request, there can be multiple threads running the service method of the same servlet instance. and hence the class variables may create issues. Look at the servlet life cycle
multiple instances of Servlets implementing SingleThreadModel are created to handle the requests and they seem to reliably thread-safe.
While that will lead to multiple instances being created, that by itself is not sufficient to guarantee thread-safety. Which, as Bear pointed out, is why it's deprecated and should not be used.