Permalink
Browse files

Updated partfait to use guava 18.0

  • Loading branch information...
1 parent 9ac54d4 commit 0c858c81ed70c36d4ee598eab742221b93b001d5 Mark Grebler committed Jun 9, 2015
@@ -6,11 +6,11 @@
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
import net.jcip.annotations.ThreadSafe;
-import com.google.common.base.Function;
-import com.google.common.collect.MapMaker;
/**
* <p>
@@ -31,14 +31,13 @@
*/
@ThreadSafe
public class ThreadContext {
- private static final Function<Thread, Map<String, Object>> NEW_CONTEXT_CREATOR = new Function<Thread, Map<String, Object>>() {
- public Map<String, Object> apply(Thread thread) {
- return new ConcurrentHashMap<String, Object>();
+ private static final CacheLoader<Thread, Map<String, Object>> NEW_CONTEXT_CREATOR = new CacheLoader<Thread, Map<String, Object>>() {
+ @Override
+ public Map<String, Object> load(Thread thread) throws Exception {
+ return new ConcurrentHashMap<>();
}
};
-
- private final ConcurrentMap<Thread, Map<String, Object>> PER_THREAD_CONTEXTS = new MapMaker()
- .weakKeys().makeComputingMap(NEW_CONTEXT_CREATOR);
+ private final LoadingCache<Thread, Map<String, Object>> PER_THREAD_CONTEXTS = CacheBuilder.newBuilder().weakKeys().build(NEW_CONTEXT_CREATOR);
private volatile MdcBridge mdcBridge = new NullMdcBridge();
@@ -52,19 +51,19 @@ public ThreadContext(MdcBridge mdcBridge) {
}
/**
- * Adds the given key/value pair to the current thread's context, and updates {@link MDC} with
+ * Adds the given key/value pair to the current thread's context, and updates {@link MdcBridge} with
* same.
*/
public void put(String key, Object value) {
- PER_THREAD_CONTEXTS.get(Thread.currentThread()).put(key, value);
+ PER_THREAD_CONTEXTS.getUnchecked(Thread.currentThread()).put(key, value);
mdcBridge.put(key, value);
}
/**
- * Removes the given key from the current thread's context and {@link MDC}.
+ * Removes the given key from the current thread's context and {@link MdcBridge}.
*/
public void remove(String key) {
- PER_THREAD_CONTEXTS.get(Thread.currentThread()).remove(key);
+ PER_THREAD_CONTEXTS.getUnchecked(Thread.currentThread()).remove(key);
mdcBridge.remove(key);
}
@@ -73,7 +72,7 @@ public void remove(String key) {
* value exists)
*/
public Object get(String key) {
- return PER_THREAD_CONTEXTS.get(Thread.currentThread()).get(key);
+ return PER_THREAD_CONTEXTS.getUnchecked(Thread.currentThread()).get(key);
}
/**
@@ -89,26 +88,26 @@ public void clear() {
mdcBridge.remove(key);
}
- PER_THREAD_CONTEXTS.get(Thread.currentThread()).clear();
+ PER_THREAD_CONTEXTS.getUnchecked(Thread.currentThread()).clear();
}
/**
* Retrieves a copy of the thread context for the given thread
*/
public Map<String, Object> forThread(Thread t) {
- return new HashMap<String, Object>(PER_THREAD_CONTEXTS.get(t));
+ return new HashMap<String, Object>(PER_THREAD_CONTEXTS.getUnchecked(t));
}
public Collection<String> allKeys() {
Set<String> keys = new HashSet<String>();
- for (Map<String, Object> threadMdc : PER_THREAD_CONTEXTS.values()) {
+ for (Map<String, Object> threadMdc : PER_THREAD_CONTEXTS.asMap().values()) {
keys.addAll(threadMdc.keySet());
}
return keys;
}
public Object getForThread(Thread thread, String key) {
- return PER_THREAD_CONTEXTS.get(thread).get(key);
+ return PER_THREAD_CONTEXTS.getUnchecked(thread).get(key);
}
/**
@@ -46,7 +46,7 @@ public void inc() {
@Override
public void inc(long increment) {
- map.get(Thread.currentThread()).addAndGet(increment);
+ loadingCache.getUnchecked(Thread.currentThread()).addAndGet(increment);
}
}
}
@@ -1,11 +1,11 @@
package com.custardsource.parfait.timing;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Map;
-import com.google.common.base.Function;
-import com.google.common.collect.MapMaker;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
public interface ThreadValue<T> {
T get();
@@ -48,13 +48,13 @@ public final T getForThread(Thread thread) {
}
public static class WeakReferenceThreadMap<T> implements ThreadValue<T> {
- protected final Map<Thread, T> map = new MapMaker().weakKeys().makeComputingMap(
- new Function<Thread, T>() {
- @Override
- public T apply(Thread from) {
- return initialValue();
- }
- });
+
+ protected final LoadingCache<Thread, T> loadingCache = CacheBuilder.newBuilder().build(new CacheLoader<Thread, T>() {
+ @Override
+ public T load(Thread thread) throws Exception {
+ return initialValue();
+ }
+ });
protected T initialValue() {
return null;
@@ -67,17 +67,17 @@ public final boolean canRetrieveAcrossThreads() {
@Override
public final T get() {
- return map.get(Thread.currentThread());
+ return loadingCache.getUnchecked(Thread.currentThread());
}
@Override
public final T getForThread(Thread thread) {
- return map.get(thread);
+ return loadingCache.getUnchecked(thread);
}
@Override
public final Map<Thread, T> asMap() {
- return new HashMap<Thread, T>(map);
+ return loadingCache.asMap();
}
}
}
View
@@ -114,7 +114,7 @@
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
- <version>r07</version>
+ <version>18.0</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>

0 comments on commit 0c858c8

Please sign in to comment.