[jboss-cvs] JBossAS SVN: r93150 - in projects/jboss-cl/branches/Branch_2_0/classloader/src: main/java/org/jboss/classloader/spi/base and 3 other directories.
David M. Lloyd
david.lloyd at redhat.com
Thu Sep 3 10:52:16 EDT 2009
On 09/03/2009 03:13 AM, jboss-cvs-commits at lists.jboss.org wrote:
> Modified: projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java
> ===================================================================
> --- projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java 2009-09-03 06:38:46 UTC (rev 93149)
> +++ projects/jboss-cl/branches/Branch_2_0/classloader/src/main/java/org/jboss/classloader/spi/base/BaseClassLoader.java 2009-09-03 08:13:57 UTC (rev 93150)
> @@ -436,6 +436,9 @@
>
> synchronized (this)
> {
> + // JBCL-114: did we lose the race to the synchronized?
> + result = isLoadedClass(name, trace);
> +
> // Not already loaded use the domain
> if (result == null)
> result = loadClassFromDomain(name, trace);
Does this actually happen?
> + @Override
> + protected Class<?> loadClass(BaseClassLoader classLoader, String name, boolean allExports) throws ClassNotFoundException
> + {
> + try
> + {
> + waitForIt();
> + }
> + catch(InterruptedException e)
> + {
> + throw new ClassNotFoundException("interrupted", e);
> + }
> + // there can be only 1
> + boolean locked = lock.tryLock();
> + if(!locked)
> + throw new IllegalStateException("only one thread is allowed to use this class loader domain");
> + return super.loadClass(classLoader, name, allExports);
> + }
Why use a lock to do this? If only one thread can use it why not just keep
a reference to the Thread and compare against Thread.currentThread()? It'd
be much faster, and use less memory besides.
- DML
More information about the jboss-cvs-commits
mailing list