You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/10/20 14:35:24 UTC
[sling-org-apache-sling-commons-fsclassloader] 33/33: SLING-7175:
Improve concurrency in FSDynamicClassLoader.
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-fsclassloader.git
commit 4445810ab2637fef3a7adc20987798537abfaa41
Author: Karl Pauls <pa...@apache.org>
AuthorDate: Thu Oct 5 07:54:30 2017 +0000
SLING-7175: Improve concurrency in FSDynamicClassLoader.
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1811166 13f79535-47bb-0310-9956-ffa450edef68
---
.../fsclassloader/impl/FSDynamicClassLoader.java | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSDynamicClassLoader.java b/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSDynamicClassLoader.java
index d35ae3d..90fe699 100644
--- a/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSDynamicClassLoader.java
+++ b/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSDynamicClassLoader.java
@@ -23,6 +23,7 @@ import java.net.URLClassLoader;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.sling.commons.classloader.DynamicClassLoader;
@@ -30,10 +31,9 @@ public class FSDynamicClassLoader
extends URLClassLoader
implements DynamicClassLoader {
- private boolean isDirty = false;
+ private volatile boolean isDirty = false;
- private final Set<String> hit = Collections.synchronizedSet(new HashSet<String>());
- private final Set<String> miss = Collections.synchronizedSet(new HashSet<String>());
+ private final Set<String> loads = Collections.newSetFromMap(new ConcurrentHashMap<String, Boolean>());
private final DynamicClassLoader parentLoader;
@@ -55,18 +55,15 @@ public class FSDynamicClassLoader
@Override
public Class<?> loadClass(final String name) throws ClassNotFoundException {
try {
- final Class<?> c = super.loadClass(name);
- this.hit.add(name);
- return c;
- } catch (final ClassNotFoundException cnfe) {
- this.miss.add(name);
- throw cnfe;
+ return super.loadClass(name);
+ } finally {
+ this.loads.add(name);
}
}
public void check(final String className) {
if ( !this.isDirty ) {
- this.isDirty = hit.contains(className) || miss.contains(className);
+ this.isDirty = loads.contains(className);
}
}
}
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.