Without using ThreadLocal, each instances of a class is shared among all the threads being provisioned and can easily create some
thread issues if that class is not designed as thread safe.
With using ThreadLocal, each thread will create its own instance of that class and isolate that instance from other threads.
When to use:
It is a great utility to use when trying to solve thread issues.
My 2 cents.
SCJP, SCJD, SCWCD, SCBCD, SCEA