You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2014/02/20 16:28:35 UTC
svn commit: r1570224 -
/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java
Author: schor
Date: Thu Feb 20 15:28:35 2014
New Revision: 1570224
URL: http://svn.apache.org/r1570224
Log:
[UIMA-3642] Enable parallel loading with UIMAClassLoader, for Java 7 and later
Modified:
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java?rev=1570224&r1=1570223&r2=1570224&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java Thu Feb 20 15:28:35 2014
@@ -36,6 +36,13 @@ import java.util.StringTokenizer;
*
*/
public class UIMAClassLoader extends URLClassLoader {
+
+ private final static boolean SUPPORTS_PARALLEL_LOADING = Float.parseFloat(System.getProperty("java.version").substring(0,3)) >= 1.7;
+ static {
+ if (SUPPORTS_PARALLEL_LOADING) {
+ ClassLoader.registerAsParallelCapable();
+ }
+ }
/**
* Transforms the string classpath to a URL array based classpath.
*
@@ -138,8 +145,18 @@ public class UIMAClassLoader extends URL
/*
* Try to load the class itself before delegate the class loading to its parent
*/
- protected synchronized Class<?> loadClass(String name, boolean resolve)
+ protected Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException {
+ if (SUPPORTS_PARALLEL_LOADING) {
+ return loadClassImpl(name, resolve);
+ } else {
+ synchronized (this) {
+ return loadClassImpl(name, resolve);
+ }
+ }
+ }
+
+ private Class<?> loadClassImpl(String name, boolean resolve) throws ClassNotFoundException {
// First, check if the class has already been loaded
Class<?> c = findLoadedClass(name);
if (c == null) {
@@ -154,7 +171,6 @@ public class UIMAClassLoader extends URL
if (resolve) {
resolveClass(c);
}
- return c;
+ return c;
}
-
}