Should I use the SingleThreadModel interface or provide explicit synchronization to make my JSP pages and servlets thread safe?

Govind Seshadri

You can have a any servlet implement the SingleThreadModel interface. JSP pages implement this in the background when you specify

<%@ page isThreadSafe="false" %> 

Although the SingleThreadModel technique is easy to use, and works well for low volume sites, it does not scale well. If you anticipate your users to increase in the future, you may be better off implementing synchronization for your variables. The key however, is to effectively minimize the amount of code that is synchronzied so that you take maximum advantage of multithreading.

Also, note that SingleThreadModel is pretty resource intensive from the server's perspective. The most serious issue however is when the number of concurrent requests exhaust the servlet instance pool. In that case, all the unserviced requests are queued until something becomes free - which results in poor performance. Since the usage is non-deterministic, it may not help much even if you did add more memory and increased the size of the instance pool.