什么"类加载死锁"这意味着什么

时间:2017-12-28 14:41:18

标签: java android

我有这个课程:

public class User {

    public static final NonRegisteredUser NON_REG_USER = new NonRegisteredUser();

    //...

    public static class NonRegisteredUser extends User {
        //...
    }

}

代码检查员正在检测此警告:

  

从超类User引用子类NonRegisteredUser   初始化程序可能导致类加载死锁

究竟是什么意思?

2 个答案:

答案 0 :(得分:7)

只有当你有2个线程并且一个开始加载User并且一个开始加载NonRegisteredUser时,才会发生死锁。有适当的同步将导致死锁,但它需要单独的线程。如果加载发生在一个线程中,则没有死锁,因为线程拥有两个锁。

因此消息中的可能。然而,死锁通常往往需要一个特定的环境,因此没有什么奇怪的。

答案 1 :(得分:-1)

类加载器开始加载User

静态成员首先是init in order or appearance。所以类加载器会看到NonRegisteredUser类,并尝试加载User类进行初始化。

接下来,类加载器开始加载User

静态成员首先是init in order or appearance。所以类加载器会看到NonRegisteredUser类,并尝试加载User类进行初始化。

接下来,类加载器开始加载User

静态成员首先是init in order or appearance。所以类加载器看到NonRegisteredUser类,并尝试加载User类进行初始化......