[Schmitzm-commits] r2010 - trunk/schmitzm-core/src/main/java/de/schmitzm/regex

scm-commit at wald.intevation.org scm-commit at wald.intevation.org
Sat May 26 21:28:30 CEST 2012


Author: alfonx
Date: 2012-05-26 21:28:30 +0200 (Sat, 26 May 2012)
New Revision: 2010

Modified:
   trunk/schmitzm-core/src/main/java/de/schmitzm/regex/RegexCache.java
Log:


Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/regex/RegexCache.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/regex/RegexCache.java	2012-05-26 19:00:46 UTC (rev 2009)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/regex/RegexCache.java	2012-05-26 19:28:30 UTC (rev 2010)
@@ -3,6 +3,7 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.MatchResult;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -89,35 +90,9 @@
 
 //	final static Map<String, ThreadLocal<Matcher>> matchersCachedThreadLocalPerRegex = Collections
 //			.synchronizedMap(new LimitedHashMap<String, ThreadLocal<Matcher>>(10000, TRUNC_METHOD.OLDEST_GET));
-//
-//	/**
-//	 * Diese Methode ist gedacht um die Erstellung von Matcher-Objekten in der JVM zu reduzieren. Es für bis zu 10000
-//	 * RegEx ein Cache verwaltet. Jeder dieser Caches ist ein ThreadLocal-Cache von Matchern. Somit liefert diese Methde
-//	 * für die selbe RegEx auf N Threads N unterschiedliche Matcher.<br/>
-//	 * Die Matcher werden für die Regex gecached. Wird ein Matcher für eine gecachte Regex mit einem anderen TEXT
-//	 * angeforderd, wird zuerst {@link Matcher#reset(CharSequence)} ausgeführt.
-//	 */
-//	public Matcher getMatcher(final String regex, final String text) {
-//		ThreadLocal<Matcher> threadLocal = matchersCachedThreadLocalPerRegex.get(regex);
-//
-//		synchronized (regex) {
-//
-//			if (threadLocal == null) {
-//
-//				threadLocal = new ThreadLocal<Matcher>() {
-//
-//					@Override
-//					protected Matcher initialValue() {
-//						return getPattern(regex).matcher(text);
-//					}
-//				};
-//				matchersCachedThreadLocalPerRegex.put(regex, threadLocal);
-//			}
-//
-//		}
-//
-//		return threadLocal.get().reset(text);
-//	}
+
+	final static Map<String, ThreadLocal<Matcher>> matchersCachedThreadLocalPerRegex = new ConcurrentHashMap<String, ThreadLocal<Matcher>>(10000);
+
 	
 	/**
 	 * Diese Methode ist gedacht um die Erstellung von Matcher-Objekten in der JVM zu reduzieren. Es für bis zu 10000
@@ -127,6 +102,36 @@
 	 * angeforderd, wird zuerst {@link Matcher#reset(CharSequence)} ausgeführt.
 	 */
 	public Matcher getMatcher(final String regex, final String text) {
+		ThreadLocal<Matcher> threadLocal = matchersCachedThreadLocalPerRegex.get(regex);
+
+		synchronized (regex) {
+
+			if (threadLocal == null) {
+
+				threadLocal = new ThreadLocal<Matcher>() {
+
+					@Override
+					protected Matcher initialValue() {
+						return getPattern(regex).matcher(text);
+					}
+				};
+				matchersCachedThreadLocalPerRegex.put(regex, threadLocal);
+			}
+
+		}
+
+		return threadLocal.get().reset(text);
+	}
+	
+	
+	/**
+	 * Diese Methode ist gedacht um die Erstellung von Matcher-Objekten in der JVM zu reduzieren. Es für bis zu 10000
+	 * RegEx ein Cache verwaltet. Jeder dieser Caches ist ein ThreadLocal-Cache von Matchern. Somit liefert diese Methde
+	 * für die selbe RegEx auf N Threads N unterschiedliche Matcher.<br/>
+	 * Die Matcher werden für die Regex gecached. Wird ein Matcher für eine gecachte Regex mit einem anderen TEXT
+	 * angeforderd, wird zuerst {@link Matcher#reset(CharSequence)} ausgeführt.
+	 */
+//	public Matcher getMatcher(final String regex, final String text) {
 //		ThreadLocal<Matcher> threadLocal = matchersCachedThreadLocalPerRegex.get(regex);
 //
 //		synchronized (regex) {
@@ -147,8 +152,8 @@
 //
 //		return threadLocal.get().reset(text);
 		
-		return getPattern(regex).matcher(text);
-	}
+//		return getPattern(regex).matcher(text);
+//	}
 
 
 	/**



More information about the Schmitzm-commits mailing list