跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

类装入问题解密,第 4 部分: 死锁和约束

深入观察两个最复杂的类装入问题


返回原文



IBM Verbose Class Loading option output
				
				About to load class C with mycl2
ExtClassLoader attempting to find package2.C
...
About to load class A with mycl1
MyClassLoader1 attempting to find package1.A
MyClassLoader1 using classpath \C:\CL_Article\ClassloaderDeadlocks\cp1
...
ExtClassLoader could not find package2.C
...
AppClassLoader attempting to find package2.C
...
AppClassLoader could not find package2.C
...
MyClassLoader1 attempting to find package2.C
MyClassLoader1 using classpath \C:\CL_Article\ClassloaderDeadlocks\cp1
MyClassLoader1 found package1/A.class in \C:\CL_Article\ClassloaderDeadlocks\cp1
MyClassLoader1 could not find package2/C.class in \C:\CL_Article\ClassloaderDeadlocks\cp1
MyClassLoader1 could not find package2.C
...
MyClassLoader2 attempting to find package2.C
MyClassLoader2 using classpath \C:\CL_Article\ClassloaderDeadlocks\cp2
MyClassLoader2 found package2/C.class in \C:\CL_Article\ClassloaderDeadlocks\cp2
			


测试用例输出
				

About to load class A with mycl1
Loaded Class A with mycl1
About to load class B with mycl2
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
        at java.lang.reflect.Method.invoke(Method.java:391)
        at ConstraintViolationTest.test(ConstraintViolationTest.java:31)
        at ConstraintViolationTest.main(ConstraintViolationTest.java:11)
Caused by: java.lang.LinkageError: Class C violates loader constraints:  definition mismatch between parent and child loaders
        at B.methodB(B.java:7)
        ... 7 more

返回原文