Java thread.getContext().getClassLoader() uniqueness



线程上下文的classloader的唯一是多么唯一。每次启动线程时是否重置?
我们可以始终确定2个并行线程永远不会具有相同的上下文classloader?
我看到一些依赖于此的框架来获取和设置运行时设置变量。

线程上下文的classloader多么唯一。

甚至不远程。

每次启动线程时是否重置?

创建线程时,它没有可以重置的上下文加载程序。它将继承父线程的上下文加载程序。启动线程不会更改其上下文加载程序。

我们可以始终确定2个并行线程永远不会具有相同的上下文classloader?

实际上不太可能。如上所述,默认情况下,螺纹将继承父的加载程序,因此,除非有人用其他加载程序明确调用 setContextClassLoader,否则默认的应用程序类加载程序(由ClassLoader.getSystemClassLoader()返回)将是所有线程使用的。即使在具有不同类加载器的环境中,也不太可能具有多数类负载器。

我看到一些像轴一样依赖于此的框架来获取和设置运行时设置变量。

这是该功能的主要用途,使用当前线程的上下文类加载程序 by Conduntion ,但当然,对于加载类和资源,不要假设这些加载程序的独特性。JVM永远不会单独使用此上下文类加载程序,因为在类中发现的符号引用通过该类的定义类加载器解决。Class.forName(String)也适用(无类加载程序参数)。它需要代码主动调用getContextClassLoader()并使用返回的加载程序进行类加载,以使此功能相关。

不要将类加载程序与ThreadLocal变量混淆。

最新更新