首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UrlClassLoader范围

UrlClassLoader范围
EN

Stack Overflow用户
提问于 2015-06-16 21:50:10
回答 1查看 318关注 0票数 1

我使用URLClassLoader从外部jar文件加载类,由它加载的类可能已经存在于我的web应用类加载器中,假设URL类加载器加载了版本1的类A,web应用程序已经用version2加载了相同的类A,这是由web应用程序需要类A启动的一个新线程,它能从UrlClassloader获得A而不是webapplication类加载器吗?如果是这样,我如何避免这种情况,如何将urlclass加载器类范围限制为仅在特定方法中服务?

请建议将类加载程序设置为

Thread.currentThread().getContextClassLoader();

我的工作是处理这个类加载器中的类,一旦完成,就用旧的类加载器替换它吗?

代码语言:javascript
复制
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()操作上?

EN

回答 1

Stack Overflow用户

发布于 2015-06-16 21:56:39

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

返回此线程的上下文ClassLoader。上下文ClassLoader由线程的创建者提供,供在此线程中运行的代码在加载类和资源时使用。如果未设置,则默认为父线程的ClassLoader上下文。原始线程的上下文ClassLoader通常设置为用于加载应用程序的类加载器。

因此,如果您没有处理这个URLClassLoader,那么它不应该影响您的线程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30878884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档