前言
在《通过tomcat源码查看其如何实现应用相互隔离》中,我介绍了在Bootstrap的init方法中,其中有关类加载器的执行有3步:
- 初始化commonLoader、catalinaLoader和sharedLoader;
- 将catalinaLoader设置为Tomcat主线程的线程上下文类加载器;
- 线程安全的加载class。
这篇博客就是介绍如何tomcat线程安全的加载class。
安全加载CLASS分析
首先来看Bootstrap的init方法,见代码清单1
代码清单1
/**
* Initialize daemon.
*/
public void init()
throws Exception
{
// Set Catalina path
setCatalinaHome();
setCatalinaBase();
initClassLoaders();
Thread.currentThread().setContextClassLoader(catalinaLoader);
SecurityClassLoad.securityClassLoad(catalinaLoader);
// Load our startup class and call its process() method
if (log.isDebugEnabled())
log.debug("Loading startup class");
Class<?> startupClass =
catalinaLoader.loadClass
("org.apache.catalina.startup.Catalina");
Object startupInstance = startupClass.newInstance();
//