What if I have a code like this i.e. a singleton object having reference to a non-static ThreadLocal variable ?What if you do? Why would you do it? You already get one instance per thread. Do you need any more? Do you need it to be thread-local at all? You'e mixing up two different kinds of scoping. Why?