gpt4 book ai didi

java - UrlClassLoader 范围

转载 作者:行者123 更新时间:2023-11-30 03:23:03 26 4
gpt4 key购买 nike

我正在使用 URLClassLoader 从外部 jar 文件加载类,由此加载的类可能已经存在于我的 Web 应用程序类加载器中,假设 URL 类加载器已加载版本 1 的类 A 和 Web 应用程序使用 version2 加载相同的类 A,由 Web 应用程序启动的新线程需要类 A,这可以从 UrlClassloader 而不是 Web 应用程序类加载器获取 A 吗?如果是这样,我该如何避免这种情况,如何限制 urlclassloader 类范围仅在特定方法中提供服务?

请建议设置类加载器

Thread.currentThread().getContextClassLoader();

我的工作是否处理此类加载器中的类,并在完成后将其替换为旧的类加载器?

ClassLoader oldLoader=Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(classLoader);
try{
siClass=classLoader.loadClass("tools.ds.Signature3");
result=doWork();
}catch(Exception e){
throw new RuntimeException(e);
}finally{
Thread.currentThread().setContextClassLoader(oldLoader);
}
return result;

这样我就可以将 classLoader 的范围限制为仅 doWork() 操作吗?

最佳答案

答案在Thread.getContextClassLoader()的javadoc中:

Returns the context ClassLoader for this Thread. The context ClassLoader is provided by the creator of the thread for use by code running in this thread when loading classes and resources. If not set, the default is the ClassLoader context of the parent Thread. The context ClassLoader of the primordial thread is typically set to the class loader used to load the application.

因此,如果您没有弄乱 URLClassLoader,它应该不会影响您的线程。

关于java - UrlClassLoader 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30878884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com