(parent-delegation model)是Java类加载机制中的一种重要概念。它是指当一个类加载器收到类加载请求时,它会先将该请求委派给它的父类加载器,依次递归地向上委派,直到顶层的启动类加载器。
双亲委派模型的工作流程如下:
-
当一个类加载器收到类加载请求时,它首先检查自己是否已经加载过这个类。如果已经加载过,则直接返回该类的Class对象,完成类加载过程。
-
如果自己还没有加载过这个类,则将类加载请求委派给它的父类加载器,父类加载器会依次向上委派,直到顶层的启动类加载器。
-
当顶层的启动类加载器接收到类加载请求时,它会尝试加载该类。如果成功加载,则将该类的Class对象返回给子类加载器,并完成类加载过程。
-
如果顶层的启动类加载器无法加载该类,则将加载请求传回给子类加载器,子类加载器再次尝试加载。
-
这个过程会一直递归执行,直到某个类加载器成功加载该类,或者所有的类加载器都无法加载该类,抛出ClassNotFoundException异常。
双亲委派模型的主要目的是保证Java类的安全性和一致性。它通过层级结构的类加载器,将类加载的责任逐级委托给上层加载器,确保类的加载是从最顶层的启动类加载器开始的。这样可以有效避免重复加载和类冲突的问题。
通过双亲委派模型,Java类库可以被有效地隔离和管理,同时也方便了自定义类加载器的实现。它是Java类加载机制的重要组成部分,对于理解Java类加载过程和保证类的安全性具有重要意义。
流程如下图所示: