- Declaring variables in JSP pages are not thread-safe. The declared variables in JSP pages end-up as instance variables in the converted Servlets. <%! Calendar c = Calendar.getInstance(); %>
- Decalring instance variables in Servlets is not thread safe, as Servlets are inherently multi-threaded and gets accessed by multiple-threads. Same is true for the Actionclasses in the struts framework.
- Some of the Java standard library classes likeSimpleDateFormat is not thread-safe. Always check the API to see if a particular class is thread-safe. If a particular class or library is not therad-safe, you could do one of three things.
Provide your own wrapper class that decorates the third-party library with proper synchronization.
This is a typical use of the decorator design pattern.
Use an alternative library, which is thread-safe if available.
For example, Joda Time Library.
Use it in a thread-safe manner.
For example, you could use the SimpleDateFormat class as shown below within a ThreadLocal class.
Each thread will have its own instance of the SimpleDateFormat object.
public class DateFormatTest
{
// anonymous inner class. Each thread will have its own copy
private final static ThreadLocal<SimpleDateFormat> shortDateFormat
= new ThreadLocal<SimpleDateFormat>()
{
protected SimpleDateFormat initialValue()
{
return new SimpleDateFormat(“dd/MM/yyyy”);
}
};
public Date convert(String strDate)throws ParseException
{
// get the SimpleDateFormat instance for this thread and parse the date string
Date d = shortDateFormat.get().parse(strDate);
return d;
}
}
- The one that is very popular with the interviewers is writing the singleton classes that are not thread-safe.