Single-Thread Model
Although it is standard to have one
servlet instance per registered servlet name, it is possible for a
servlet to elect instead to have a pool of instances created for each
of its names, all sharing the duty of handling requests. Such
servlets indicate this desire by implementing the
javax.servlet.SingleThreadModel
interface. This is an empty, tag interface that defines no methods or
variables and serves only to flag the servlet as wanting the
alternate life cycle.
A server that loads a SingleThreadModel
servlet
must guarantee, according to the Servlet API documentation,
“that no two threads will execute concurrently the service
method of that servlet.” To accomplish this, each thread uses a
free servlet instance from the pool, as shown in Figure 3.4. Thus, any servlet implementing
SingleThreadModel
can be considered thread safe
and isn’t required to synchronize access to its instance
variables.
Figure 3-4. The Single Thread Model
Such a life cycle is pointless for a counter or other servlet application that requires central state maintenance. The life cycle can be useful, however, in avoiding synchronization while still performing efficient request handling.
For example, a servlet that connects to a database sometimes needs to perform several database commands atomically as part of a single transaction. Normally, this would require the servlet to synchronize ...
Get Java Servlet Programming now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.