什么时候应该使用ThreadLocal变量?它是如何使用的?