I don't understand Why ThreadLocalMap.Entry extends WeakReference.
What's the benefit of doing this?
After all, theadlocal.remove() must be called when necessary.
What if we just make ThreadLocalMap.Entry as an ordinary struct like
{key, value}, and the key is a strong reference to ThreadLocal?