Java类加载与锁
作者:网络转载 发布时间:[ 2015/3/16 11:17:17 ] 推荐标签:Java 软件开发 线程 锁 调试
在重现这个问题的时候,我构建了下面这个小的测试用例来让大家更好地理解下这个锁的问题。这个示例启动了100个线程来加载javax.xml.parsers.DocumentBuilder这个类:
package eu.plumbr.demo;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
public class ClassloadingLock {
static class Worker extends Thread {
@Override
public void run() {
while (true) {
try {
DocumentBuilder b = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
} catch (Exception e) {// Do not do this at home, log all
// exceptions
}
}
}
}
public static void main(String[] args) throws Exception {
for (int i = 0; i < 100; i++) {
new Worker().start();
}
}
}
在运行上述这段代码的时候做一下thread dump,或者用jvisualvm进行下可视化,你会发现这些线程会不停地等待这个监视器:
这个故事告诉了我们什么呢?查找这个性能问题的其实不应该这么麻烦。我们开发的这些工具提供了许多更便利的手段来对你的JVM进行监视及检测,因此定位这类问题不再需要掌握这么多技术才能完成了。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Java性能测试有哪些不为众人所知的原则?Java设计模式??装饰者模式谈谈Java中遍历Map的几种方法Java Web入门必知你需要理解的Java反射机制知识总结编写更好的Java单元测试的7个技巧编程常用的几种时间戳转换(java .net 数据库)适合Java开发者学习的Python入门教程Java webdriver如何获取浏览器新窗口中的元素?Java重写与重载(区别与用途)Java变量的分类与初始化JavaScript有这几种测试分类Java有哪四个核心技术?给 Java开发者的10个大数据工具和框架Java中几个常用设计模式汇总java生态圈常用技术框架、开源中间件,系统架构及经典案例等

sales@spasvo.com