原文官方地址
http://docs.oracle.com/javase/7/docs/technotes/guides/lang/cl-mt.html
但是看得不太懂,忘懂的人赐教一下,并且举例一般什么情况下会出现这种情况,jdk7是如何解决的
jdk7如果修复ClassLoader死锁的问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- clxy大叔 2013-06-24 18:05关注
[quote]并且举例一般什么情况下会出现这种情况[/quote]
他里面那段就是举例。
注意是以前的版本。Class Hierarchy:类继承关系
class A extends B
class C extends DClassLoader Delegation Hierarchy:类加载继承关系
Custom Classloader CL1:
directly loads class A
delegates to custom ClassLoader CL2 for class B类加载器1 CL1,企图直接加载类A,导致其中代理的类加载器CL2,企图加载类B。
Custom Classloader CL2:
directly loads class C
delegates to custom ClassLoader CL1 for class D类加载器2 CL2,企图直接加载类C,导致其中代理的类加载器CL1,企图加载类B。
Thread 1:
Use CL1 to load class A (locks CL1)
defineClass A triggers
loadClass B (try to lock CL2)Thread 2:
Use CL2 to load class C (locks CL2)
defineClass C triggers
loadClass D (try to lock CL1)简单说,就是两个类加载器在两个线程中,按不同顺序一先一后的企图开始加载类。
由于以前版本的JDK是整个类加载器的上锁,
即一个线程拿着CL1的锁请求CL2的锁,另个却拿着CL2的锁请求CL1的锁,
导致死锁。[quote]jdk7是如何解决的[/quote]
JDK7在个类加载器上锁时,可以做更小的粒度。
在上面的例子里,新版本不再是整个类加载器上锁,而是类加载器 + 待加载的类(类名)。解决了上面的问题。后面的详细步骤就不翻译了。
基本上,如果你的类加载器以前没有出现过死锁,就不用折腾。或者你没有像上面的例子那样循环套循环,也不用太注意这个问题。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 高价求中通快递查询接口
- ¥15 解决一个加好友限制问题 或者有好的方案
- ¥15 关于#java#的问题,请各位专家解答!
- ¥15 急matlab编程仿真二阶震荡系统
- ¥20 TEC-9的数据通路实验
- ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
- ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
- ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
- ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
- ¥15 如何实现H5在QQ平台上的二次分享卡片效果?