ThreadLocal vs Synchronize & Example

Environment: Java 6

Recently I was looking into capabilities of theThreadLocal. And I decided to test everything against a SimpleDateFormat instance. Unfortunately the SDF is not a thread safe. So in a multi-threaded environment you can avoid concurrent modifications using “Synchronized”. I ran 100000 iterations over small set of 3 dates. Now it was time to implement same thing using ThreadLocal.

public class FormatDate {

	private static ThreadLocal<SimpleDateFormat> local = 
		new ThreadLocal<SimpleDateFormat>() {

		protected  SimpleDateFormat initialValue() {
			SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
			return sdf;
		}
	};

	public static SimpleDateFormat get() {
		return local.get();
	}
}

So when I ran my test using ThreadLocal, surprisingly I got benefit of almost ~1000ms over earlier run. This kind of small things matter when it’s part of heavyweight applications. In short using synchronize can be expensive & can be improved by alternate implementations.

Few articles regarding ThreadLocal:
http://www.ibm.com/developerworks/java/library/j-threads3.html

http://javaboutique.internet.com/tutorials/localdata/

http://www.javamex.com/tutorials/synchronization_concurrency_thread_local.shtml

Leave a comment

Your comment

*