我要说的是,最典型的ThreadLocal用法是当你有一个对象必须在一个流程中的任何地方都可访问时,你不想在所有层上传递对该对象的引用.像单身模式但每个线程的东西.
示例是数据库连接,休眠会话等.您可以在流程的开头某处打开它们,在流程结束时提交/关闭,并在流程中随处使用.
适用于当您想要使用非线程安全的对象,但又不想同步对它们的访问(出于性能原因)时。或多或少,您为需要多次使用的对象创建了一个访问器,以便确保可能调用该访问器的每个线程都获得一个不同的、未使用的访问器。一个非常典型的用途是使用 SimpleDateFormat,它是一个类,如果它是线程安全的,您的实例将被声明为静态,以便重用同一实例。
这是一篇描述它的好文章:Dr. Dobbs:在 Java 中使用线程局部变量