加载:
protected Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
synchronized (getClassLoadingLock(name)) {
......
return c;
}
}
查看getClassLoadingLock的具体实现可以发现:
1)对于同一个classloader来说,加载某个class文件为Class对象时。为保证class文件只会被加载一次,所以每种class文件都会有一个锁。一般来说
protected Object getClassLoadingLock(String className) {
Object lock = this;
if (parallelLockMap != null) {
Object newLock = new Object();
lock = parallelLockMap.putIfAbsent(className, newLock);
if (lock == null) {
lock = newLock;
}
}
return lock;
}