苏州网站制作网络建设公司博州住房和城乡建设部网站

web/2025/10/6 0:59:33/文章来源:
苏州网站制作网络建设公司,博州住房和城乡建设部网站,青海旭云网络做网站需要多少钱,重庆建站模板展示我很难思考与Java 加载有关的东西#xff0c;而不是与类加载器有关的东西。 在使用应用程序服务器或OSGi的情况下尤其如此#xff0c;在这些应用程序服务器或OSGi中#xff0c;经常使用多个类加载器#xff0c;并且透明地使用类加载器的能力降低了。 我同意OSGI Alliance B… 我很难思考与Java 加载有关的东西而不是与类加载器有关的东西。 在使用应用程序服务器或OSGi的情况下尤其如此在这些应用程序服务器或OSGi中经常使用多个类加载器并且透明地使用类加载器的能力降低了。 我同意OSGI Alliance Blog文章中关于类加载器的了解 “在模块化环境中类加载器代码会造成严重破坏。” Neil Bartlett在博客文章The Dreaded Thread Context Class Loader上发表了文章他在文章中描述了为什么引入了线程上下文类加载器以及为什么它的使用对OSGi不友好。 Bartlett指出在极少数情况下“一个库只咨询TCCL”但在极少数情况下“我们有些固执”并且“在调用该库之前必须从我们自己的代码中显式设置TCCL。” Alex Miller还写了有关线程上下文类加载器 TCCL的文章并指出“ Java框架没有遵循一致的类加载模式”并且“许多常见且重要的框架的确使用了线程上下文类加载器JMXJAXP JNDI 等等。” 他强调了这一点“如果您使用的是J2EE应用服务器那么几乎可以肯定您依赖于使用线程上下文类加载器的代码。” 在那篇文章中 Miller提供了一种基于动态代理的解决方案以在需要“设置线程上下文类加载器”然后“记住原始上下文类加载器并重新设置”的情况下提供帮助。 Knopflerfish Framework 一种OSGi实现在其文档的“编程”部分中描述了如何使用线程上下文类加载器。 以下引用摘录自Knopflerfish 5.2的“编程”文档的“设置上下文类加载器”部分 像大多数JNDI查找服务一样许多外部库都需要正确设置 线程上下文类加载器 。 如果未设置则即使包含了所有必需的库也可能引发ClassNotFoundException或类似事件。 要解决此问题只需在激活器中生成一个新线程并从该线程中进行工作即可。 … 它是 不建议在启动线程上持久设置上下文类加载器因为该线程对于您的捆绑包而言可能不是唯一的。 效果可能因OSGi供应商而异。 如果您不产生新线程则您 返回之前 必须重置上下文类加载器。 Knopflerish提供了一个简单的类org.knopflerfish.util.ClassLoaderUtil 该类支持切换到提供的类加载器在OSGi应用程序中可能经常是线程上下文类加载器并通过finally子句确保重置了原始上下文类加载器。操作完成后。 我已经实现了该类的我自己的改编该改编在下一个代码清单中显示。 ClassLoaderSwitcher.java package dustin.examples.classloader;/*** Utility class for running operations on an explicitly specified class loader.*/ public class ClassLoaderSwitcher {/*** Execute the specified action on the provided class loader.** param classLoaderToSwitchTo Class loader from which the* provided action should be executed.* param actionToPerformOnProvidedClassLoader Action to be* performed on the provided class loader.* param T Type of Object returned by specified action method.* return Object returned by the specified action method.*/public static T T executeActionOnSpecifiedClassLoader(final ClassLoader classLoaderToSwitchTo,final ExecutableActionT actionToPerformOnProvidedClassLoader){final ClassLoader originalClassLoader Thread.currentThread().getContextClassLoader();try{Thread.currentThread().setContextClassLoader(classLoaderToSwitchTo);return actionToPerformOnProvidedClassLoader.run();}finally{Thread.currentThread().setContextClassLoader(originalClassLoader);}}/*** Execute the specified action on the provided class loader.** param classLoaderToSwitchTo Class loader from which the* provided action should be executed.* param actionToPerformOnProvidedClassLoader Action to be* performed on the provided class loader.* param T Type of Object returned by specified action method.* return Object returned by the specified action method.* throws Exception Exception that might be thrown by the* specified action.*/public static T T executeActionOnSpecifiedClassLoader(final ClassLoader classLoaderToSwitchTo,final ExecutableExceptionableActionT actionToPerformOnProvidedClassLoader) throws Exception{final ClassLoader originalClassLoader Thread.currentThread().getContextClassLoader();try{Thread.currentThread().setContextClassLoader(classLoaderToSwitchTo);return actionToPerformOnProvidedClassLoader.run();}finally{Thread.currentThread().setContextClassLoader(originalClassLoader);}} } 在ClassLoaderSwitcher类上定义的两个方法每个都将接口作为其参数之一并带有指定的类加载器。 接口使用run()方法指定一个对象并且将针对提供的类加载器执行run()方法。 接下来的两个代码清单显示接口ExecutableAction和ExecutableExceptionableAction 。 ExecutableAction.java package dustin.examples.classloader;/*** Encapsulates action to be executed.*/ public interface ExecutableActionT {/*** Execute the operation.** return Optional value returned by this operation;* implementations should document what, if anything,* is returned by implementations of this method.*/T run(); } ExecutableExceptionableAction.java package dustin.examples.classloader;/*** Describes action to be executed that is declared* to throw a checked exception.*/ public interface ExecutableExceptionableActionT {/*** Execute the operation.** return Optional value returned by this operation;* implementations should document what, if anything,* is returned by implementations of this method.* throws Exception that might be possibly thrown by this* operation.*/T run() throws Exception; } 调用ClassLoaderSwitcher类上定义的方法的客户端不一定比执行临时上下文类加载器自身切换时要少一些代码但是使用这样的通用类可确保始终更改上下文类加载器返回到原始类加载器从而使开发人员无需确保可以进行重置并防止“重置”在某个时候被无意中删除或在过程中的某个时候移得太晚。 需要为操作临时更改上下文类加载器的客户端可能会这样做如下所示 临时直接将ClassLoader切换为执行动作 final ClassLoader originalClassLoader Thread.currentThread().getContextClassLoader(); try {Thread.currentThread().setContextClassLoader(BundleActivator.class.getClassLoader());final String returnedClassLoaderString String.valueOf(Thread.currentThread().getContextClassLoader()) } finally {Thread.currentThread().setContextClassLoader(originalClassLoader); } 没有太多的代码行但是必须记住要重置上下文类加载器为其原始类加载器。 接下来演示如何使用ClassLoaderSwitcher实用工具类执行相同的操作。 使用ClassLoaderSwitcher切换类加载器以执行操作JDK 8之前的版本 final String returnedClassLoaderString ClassLoaderSwitcher.executeActionOnSpecifiedClassLoader(BundleActivator.class.getClassLoader(),new ExecutableActionString(){Overridepublic String run(){return String.valueOf(Thread.currentThread().getContextClassLoader());}}); 最后一个例子并不比第一个例子短但是开发人员无需担心在第二个例子中显式地重置上下文类加载器。 请注意这两个示例引用BundleActivator来在OSGi应用程序中获取Activator / System类加载器。 这就是我在这里使用的但是可以在此处使用任何在适当的类加载器上加载的类而不是BundleActivator 。 需要注意的另一件事是我的示例使用了一个非常简单的操作该操作在指定的类加载器上执行返回当前线程上下文类加载器的String表示形式在这里效果很好因为它使我很容易看到指定的类加载器是用过的。 在实际情况下此方法可以是在指定的类加载器上运行所需的任何方法。 如果我在指定的类加载器上调用的方法抛出一个已检查的异常则可以使用ClassLoaderSwitcher提供的另一个重载方法同名来运行该方法。 下一个代码清单对此进行了演示。 将ClassLoaderSwitcher与可能引发检查异常的方法一起使用JDK 8之前的版本 String returnedClassLoaderString null; try {returnedClassLoaderString ClassLoaderSwitcher.executeActionOnSpecifiedClassLoader(BundleActivator.class.getClassLoader(),new ExecutableExceptionableActionString(){Overridepublic String run() throws Exception{return mightThrowException();}}); } catch (Exception exception) {System.out.println(Exception thrown while trying to run action.); } 使用JDK 8我们可以使客户端代码更加简洁。 接下来的两个代码清单包含与前面两个代码清单中显示的方法相对应的方法但已更改为JDK 8样式。 使用ClassLoaderSwitcher切换类加载器以执行动作JDK 8样式 final String returnedClassLoaderString ClassLoaderSwitcher.executeActionOnSpecifiedClassLoader(urlClassLoader,(ExecutableActionString) () -{return String.valueOf(Thread.currentThread().getContextClassLoader());}); 将ClassLoaderSwitcher与可能引发检查异常的方法一起使用JDK 8样式 String returnedClassLoaderString null; try {returnedClassLoaderString ClassLoaderSwitcher.executeActionOnSpecifiedClassLoader(urlClassLoader,(ExecutableExceptionableActionString) () - {return mightThrowException();}); } catch (Exception exception) {System.out.println(Exception thrown while trying to run action.); } 与直接设置和重置上下文类加载器相比 JDK 8的lambda表达式使使用ClassLoaderSwitcher的客户端代码更加简洁并且可以说更具可读性同时通过确保始终将上下文类加载器切换回其来提供更高的安全性。原始类加载器。 结论 尽管无疑最好避免尽可能多地切换上下文类加载器但是有时您可能没有其他合理的选择。 在那些时候将开关中涉及的多个步骤封装起来然后切换回一个可以由客户端调用的方法可以增加操作的安全性并且如果使用JDK 8编写甚至可以使客户端拥有更简洁的代码。 其他参考 在本文中已经提到了其中一些参考甚至对其进行了重点介绍但为方便起见在此再次将其包括在内。 GitHub上此博客文章中完整类的源代码 不同的包名称 OSGi联盟 关于类加载器的知识 Neil Bartlett 可怕的线程上下文类加载器 纯粹的危险 两个类加载器的故事 信息矿山 OSGi类加载 JNDI教程类加载 AdobeOSGi中的类加载器问题 使用Thread上下文的第三方库 揭秘Java类加载 Knopflerfish 5.2.0文档 编程Knopflerfish设置上下文类加载器 Knopflerfish 5.2.0 Javadoc org.knopflerfish.util.ClassLoaderUtil JavaWorld 从ClassLoader迷宫中寻找出路 技术与达尔文尼亚 Java ClassLoader和Context ClassLoader Impala博客 在多模块环境中使用线程的上下文类加载器 翻译自: https://www.javacodegeeks.com/2016/08/remembering-reset-thread-context-class-loader.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么免费网站高端效果图制作公司

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP1282 题目大意 n个多米诺骨牌,上下值不相同,可以交换一个多米诺上下的值,求最少的交换次数使上下之和的差值最小。 解题思路 用fi,jNfi,jN表示只计算前i个多米诺&…

购物网站建设网长沙网红景点

微服务注册中心 注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就这里找到服务的地址,进行调用。 微服务注册中心 服务注…

主机屋网站在那注册展览会建设网站平台的作用

关于 情绪检测,是脑科学研究中的一个常见和热门的方向。在进行情绪检测的分类中,真实数据不足,经常导致情绪检测模型的性能不佳。因此,对数据进行增强,成为了一个提升下游任务的重要的手段。本项目通过DCGAN模型实现脑…

临沂定制网站建设公司我公司要网站建设

之前的学习笔记“SPI不够用?USART来帮忙”一文中介绍了用如何把USART当做SPI来用的方法。此外,ST的USART还有很多新特性,没准有你不知道的。在此,我们整理出来以下串口新特性,供大家参考。支持RXD和TXD管脚互换很多时候…

东平做网站苏州吴中区seo关键词优化排名

Ajax的传递json数据的实现&#xff1a; 看这篇之前建议大家去看看前面两篇文章&#xff1a; 1.Ajax基本案例详解之$.ajax的实现 2.Ajax基本案例详解之$.get的实现 现在来看一下具体的内容&#xff0c;在index.jsp的<script>里面写&#xff1a; $.ajax({url:"…

镇江网站建设远航科技用vs2017做网站

HUAWEI Mate X3是全球首款四曲折叠手机&#xff0c;轻薄实力派。它采用了独创的寰宇舷窗设计&#xff0c;内外双屏高清呈现均支持120Hz疾速高刷&#xff0c;10.7亿色彩显示&#xff0c;获得德国莱茵TV色准和准确色彩投射双认证。无论是看视频、玩游戏、办公学习&#xff0c;还是…

油边机 东莞网站建设四川德行天下建设工程有限公司网站

目录 1.什么是LRU算法 2.LRU算法原题描述 3.LRU算法设计 4.LRU算法细节分析 5.代码实现 1.什么是LRU算法 就是一种缓存淘汰策略。 计算机的缓存容量有限&#xff0c;如果缓存满了就要删除一些内容&#xff0c;给新内容腾位置。但问题是&#xff0c;删除哪些内容呢&#…

wordpress内置编辑器免费seo网站推广

在当今数字化时代&#xff0c;IP地址定位工具成为了许多领域中不可或缺的技术支持&#xff0c;为网络安全、地理定位服务和个性化推荐等提供了重要数据支持。其中&#xff0c;IP数据云作为一种领先的IP地址定位工具&#xff0c;具有一系列功能和优势&#xff0c;本文将对其进行…

做网站的公司还市场吗做任务的正规网站

目录 1 vmware exporter安装配置1.1 vmware exporter介绍1.2 安装 - 使用kubernetes部署1、下载2、修改配置文件3、执行安装4、查看 1.3 安装-使用docker的方式1.4 Prometheus配置1.5 Grafana配置&#xff08;模板页面还需要修改&#xff09; 总结 1 vmware exporter安装配置 …

网站com域名上不去cn能深圳信息公司做关键词

一,工具简介 biolatency 跟踪块设备 I/O(磁盘 I/O),并记录 I/O 延迟(时间)的分布,通过 Ctrl-C 可以停止跟踪,并将其以直方图的形式打印出来。 它通过动态追踪blk_族函数(与块设备相关的内核函数)并记录函数的变化,从而收集块设备I/O的延迟信息。它记录I/O延迟的分…

网站建设宗旨抑郁症图片加时间生成器在线制作

这题分块搞一搞&#xff0c;算到最后发现结果就是算矩阵J的行列式&#xff0c;要取模m&#xff0c;那个sign消掉了。 参考文献在这&#xff0c;欧几里德算法的应用&#xff0c;金斌 代码还是比较好写的&#xff0c;python代码 n,mmap(int,raw_input().split()) a[] for i in ra…

公司内部网站源码怎么自己做游戏

标题&#xff1a;【leetcode】双指针 水墨不写bug 我认为 讲清楚为什么要用双指针 比讲怎么用双指针更重要&#xff01; &#xff08;一&#xff09;快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数…

免费成品网站下载网站添加支付宝

AI产品发展到现在&#xff0c;消费端的产品应用还受到比较大的限制&#xff1b;但是在B端&#xff0c;已经有了不错的表现。作者总结了AI产品在B端的几款应用&#xff0c;一起来看看表现如何。 生成式AI在B端产品的应用分析© 由 ZAKER 提供 随着今年生成式AI应用的大范围…

公司网站后台是什么制作图片网站

1.chunk拆分对最终效果的影响 2.改进知识的拆分方案 3.AI套件 4.相似性检索的关键&#xff1a;embedding技术 嵌入技术是相似性检索的关键&#xff0c;它能够将数据转换为向量表示&#xff0c;并通过比较向量之间的相似性来实现相似性检索&#xff1b;embedding&#xff1a;将…

邯郸推广网络宣传哪家好优化网站用软件好吗

1.Ctrl鼠标点击函数名&#xff08;对应的函数名会加下划线&#xff09; 或 Ctrlg 2.help(function) 在某些情况下方法1失效&#xff0c;比如TensorFlow中的一些函数tf.constant&#xff0c;他只会跳转到一个init文件&#xff0c;并不会展示函数原型。 所以可以这样help(tf.co…

网站建设与维护典型案例小程序模板套用教程

因为本章的内容是使用jq工具配合完成&#xff0c;因此在开始部分会先花一定的篇幅介绍jq机器使用&#xff0c;如果读者已经熟悉jq&#xff0c;可以直接跳过这部分。 先来看应用场景&#xff0c;App 经常会有一些信息展示的列表页&#xff0c;比如商家的菜品、股票的公司、文章的…

深圳百度网站推广广州 网站建设模板

netflix 模式创新单例设计模式是一种软件设计模式&#xff0c;用于将类的实例化限制为一个对象。 与其他创建设计模式&#xff08;例如抽象工厂 &#xff0c; 工厂和构建器模式&#xff09;相比&#xff0c;单例将创建一个对象&#xff0c;但也将负责&#xff0c;因此该对象只…

闸北区网站设计与制网站制作服务合同

文章目录 MATLAB句柄函数句柄的简单操作函数 MATLAB句柄 MATLAB平台对于函数调用分为直接调用和间接调用。直接调用即调用子函数。   子函数只能被与它所在M文件同名的主函数或者在M文件内的其他函数调用。一个文件只能有一个主函数。   使用函数句柄可以避免上述问题。句柄…

传奇简单网站模板wordpress设置页面403权限

数字化转型已不再是企业追求效益最大化的手段&#xff0c;而是成为经济发展变革、提升国家数字竞争的核心动力。在此背景下&#xff0c;博睿数据继续发力&#xff0c;隆重推出「数字化运维转型平台」&#xff0c;汇聚了我们对数字化转型的深刻洞见与实践经验&#xff0c;以期为…

做网站怎么加背景图片运营工资一般多少

《VFP参考资料word版》下载地址&#xff1a; 网盘下载 转载于:https://www.cnblogs.com/long12365/p/9731452.html