You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2015/07/29 15:27:35 UTC
tapestry-5 git commit: TAP5-2477: improve performance of
org.apache.tapestry5.ioc.internal.services.PerthreadManagerImpl.getPerthreadMap(),
extract classes
Repository: tapestry-5
Updated Branches:
refs/heads/master 9a5c183af -> f2a97f3cd
TAP5-2477: improve performance of org.apache.tapestry5.ioc.internal.services.PerthreadManagerImpl.getPerthreadMap(), extract classes
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/f2a97f3c
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/f2a97f3c
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/f2a97f3c
Branch: refs/heads/master
Commit: f2a97f3cd51362ad94596b01f672d35cedd86438
Parents: 9a5c183
Author: Jochen Kemnade <jo...@eddyson.de>
Authored: Wed Jul 29 14:53:49 2015 +0200
Committer: Jochen Kemnade <jo...@eddyson.de>
Committed: Wed Jul 29 14:53:49 2015 +0200
----------------------------------------------------------------------
.../internal/services/PerthreadManagerImpl.java | 149 +++++++++++--------
1 file changed, 85 insertions(+), 64 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/f2a97f3c/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java
index 00be7a4..83b08f7 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java
@@ -46,7 +46,7 @@ public class PerthreadManagerImpl implements PerthreadManager
private final AtomicInteger uuidGenerator = new AtomicInteger();
- private final AtomicBoolean shutdown = new AtomicBoolean();
+ private volatile boolean shutdown = false;
public PerthreadManagerImpl(Logger logger)
{
@@ -63,7 +63,7 @@ public class PerthreadManagerImpl implements PerthreadManager
public void run()
{
cleanup();
- shutdown.set(true);
+ shutdown = true;
}
});
}
@@ -73,7 +73,7 @@ public class PerthreadManagerImpl implements PerthreadManager
// This is a degenerate case; it may not even exist; but if during registry shutdown somehow code executes
// that attempts to create new values or add new listeners, those go into a new map instance that is
// not referenced (and so immediately GCed).
- if (shutdown.get())
+ if (shutdown)
{
return CollectionFactory.newMap();
}
@@ -155,25 +155,7 @@ public class PerthreadManagerImpl implements PerthreadManager
<T> ObjectCreator<T> createValue(final Object key, final ObjectCreator<T> delegate)
{
- return new ObjectCreator<T>()
- {
- public T createObject()
- {
- Map map = getPerthreadMap();
- T storedValue = (T) map.get(key);
-
- if (storedValue != null)
- {
- return (storedValue == NULL_VALUE) ? null : storedValue;
- }
-
- T newValue = delegate.createObject();
-
- map.put(key, newValue == null ? NULL_VALUE : newValue);
-
- return newValue;
- }
- };
+ return new DefaultObjectCreator<T>(key, delegate);
}
public <T> ObjectCreator<T> createValue(ObjectCreator<T> delegate)
@@ -183,48 +165,7 @@ public class PerthreadManagerImpl implements PerthreadManager
<T> PerThreadValue<T> createValue(final Object key)
{
- return new PerThreadValue<T>()
- {
- @Override
- public T get()
- {
- return get(null);
- }
-
- @Override
- public T get(T defaultValue)
- {
- Map map = getPerthreadMap();
-
- Object storedValue = map.get(key);
-
- if (storedValue == null)
- {
- return defaultValue;
- }
-
- if (storedValue == NULL_VALUE)
- {
- return null;
- }
-
- return (T) storedValue;
- }
-
- @Override
- public T set(T newValue)
- {
- getPerthreadMap().put(key, newValue == null ? NULL_VALUE : newValue);
-
- return newValue;
- }
-
- @Override
- public boolean exists()
- {
- return getPerthreadMap().containsKey(key);
- }
- };
+ return new DefaultPerThreadValue(key);
}
@Override
@@ -258,4 +199,84 @@ public class PerthreadManagerImpl implements PerthreadManager
cleanup();
}
}
+
+ private final class DefaultPerThreadValue<T> implements PerThreadValue<T>
+ {
+ private final Object key;
+
+ DefaultPerThreadValue(final Object key)
+ {
+ this.key = key;
+
+ }
+ @Override
+ public T get()
+ {
+ return get(null);
+ }
+
+ @Override
+ public T get(T defaultValue)
+ {
+ Map map = getPerthreadMap();
+
+ Object storedValue = map.get(key);
+
+ if (storedValue == null)
+ {
+ return defaultValue;
+ }
+
+ if (storedValue == NULL_VALUE)
+ {
+ return null;
+ }
+
+ return (T) storedValue;
+ }
+
+ @Override
+ public T set(T newValue)
+ {
+ getPerthreadMap().put(key, newValue == null ? NULL_VALUE : newValue);
+
+ return newValue;
+ }
+
+ @Override
+ public boolean exists()
+ {
+ return getPerthreadMap().containsKey(key);
+ }
+ }
+
+ private final class DefaultObjectCreator<T> implements ObjectCreator<T>
+ {
+
+ private final Object key;
+ private final ObjectCreator<T> delegate;
+
+ DefaultObjectCreator(final Object key, final ObjectCreator<T> delegate)
+ {
+ this.key = key;
+ this.delegate = delegate;
+ }
+
+ public T createObject()
+ {
+ Map map = getPerthreadMap();
+ T storedValue = (T) map.get(key);
+
+ if (storedValue != null)
+ {
+ return (storedValue == NULL_VALUE) ? null : storedValue;
+ }
+
+ T newValue = delegate.createObject();
+
+ map.put(key, newValue == null ? NULL_VALUE : newValue);
+
+ return newValue;
+ }
+ }
}