提交 436d8b6d 编写于 作者: F fxleyu 提交者: oldratlee

readablity improvement: use set instead of map

use set instead of map for ttl instances holder by Collections.newSetFromMap
https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#newSetFromMap-java.util.Map-

Merge pull request #95 from fxleyu/master
上级 f999bd97
package com.alibaba.ttl; package com.alibaba.ttl;
import java.util.HashMap; import java.util.*;
import java.util.Iterator;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
...@@ -97,22 +94,25 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> { ...@@ -97,22 +94,25 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
return copy(get()); return copy(get());
} }
private static InheritableThreadLocal<Map<TransmittableThreadLocal<?>, ?>> holder = private static InheritableThreadLocal<Set<TransmittableThreadLocal<?>>> holder =
new InheritableThreadLocal<Map<TransmittableThreadLocal<?>, ?>>() { new InheritableThreadLocal<Set<TransmittableThreadLocal<?>>>() {
@Override @Override
protected Map<TransmittableThreadLocal<?>, ?> initialValue() { protected Set<TransmittableThreadLocal<?>> initialValue() {
return new WeakHashMap<TransmittableThreadLocal<?>, Object>(); return Collections.newSetFromMap(new WeakHashMap<TransmittableThreadLocal<?>, Boolean>());
} }
@Override @Override
protected Map<TransmittableThreadLocal<?>, ?> childValue(Map<TransmittableThreadLocal<?>, ?> parentValue) { protected Set<TransmittableThreadLocal<?>> childValue(Set<TransmittableThreadLocal<?>> parentValue) {
return new WeakHashMap<TransmittableThreadLocal<?>, Object>(parentValue); Set<TransmittableThreadLocal<?>> result = Collections.newSetFromMap(
new WeakHashMap<TransmittableThreadLocal<?>, Boolean>());
result.addAll(parentValue);
return result;
} }
}; };
private void addValue() { private void addValue() {
if (!holder.get().containsKey(this)) { if (!holder.get().contains(this)) {
holder.get().put(this, null); // WeakHashMap supports null value. holder.get().add(this);
} }
} }
...@@ -121,9 +121,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> { ...@@ -121,9 +121,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
} }
private static void doExecuteCallback(boolean isBefore) { private static void doExecuteCallback(boolean isBefore) {
for (Map.Entry<TransmittableThreadLocal<?>, ?> entry : holder.get().entrySet()) { for (TransmittableThreadLocal<?> threadLocal : holder.get()) {
TransmittableThreadLocal<?> threadLocal = entry.getKey();
try { try {
if (isBefore) { if (isBefore) {
threadLocal.beforeExecute(); threadLocal.beforeExecute();
...@@ -148,8 +146,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> { ...@@ -148,8 +146,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
System.out.println("Start TransmittableThreadLocal Dump..."); System.out.println("Start TransmittableThreadLocal Dump...");
} }
for (Map.Entry<TransmittableThreadLocal<?>, ?> entry : holder.get().entrySet()) { for (final TransmittableThreadLocal<?> key : holder.get()) {
final TransmittableThreadLocal<?> key = entry.getKey();
System.out.println(key.get()); System.out.println(key.get());
} }
System.out.println("TransmittableThreadLocal Dump end!"); System.out.println("TransmittableThreadLocal Dump end!");
...@@ -246,7 +243,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> { ...@@ -246,7 +243,7 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
*/ */
public static Object capture() { public static Object capture() {
Map<TransmittableThreadLocal<?>, Object> captured = new HashMap<TransmittableThreadLocal<?>, Object>(); Map<TransmittableThreadLocal<?>, Object> captured = new HashMap<TransmittableThreadLocal<?>, Object>();
for (TransmittableThreadLocal<?> threadLocal : holder.get().keySet()) { for (TransmittableThreadLocal<?> threadLocal : holder.get()) {
captured.put(threadLocal, threadLocal.copyValue()); captured.put(threadLocal, threadLocal.copyValue());
} }
return captured; return captured;
...@@ -266,10 +263,8 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> { ...@@ -266,10 +263,8 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
Map<TransmittableThreadLocal<?>, Object> capturedMap = (Map<TransmittableThreadLocal<?>, Object>) captured; Map<TransmittableThreadLocal<?>, Object> capturedMap = (Map<TransmittableThreadLocal<?>, Object>) captured;
Map<TransmittableThreadLocal<?>, Object> backup = new HashMap<TransmittableThreadLocal<?>, Object>(); Map<TransmittableThreadLocal<?>, Object> backup = new HashMap<TransmittableThreadLocal<?>, Object>();
for (Iterator<? extends Map.Entry<TransmittableThreadLocal<?>, ?>> iterator = holder.get().entrySet().iterator(); for (Iterator<TransmittableThreadLocal<?>> iterator = holder.get().iterator(); iterator.hasNext(); ) {
iterator.hasNext(); ) { TransmittableThreadLocal<?> threadLocal = iterator.next();
Map.Entry<TransmittableThreadLocal<?>, ?> next = iterator.next();
TransmittableThreadLocal<?> threadLocal = next.getKey();
// backup // backup
backup.put(threadLocal, threadLocal.get()); backup.put(threadLocal, threadLocal.get());
...@@ -307,10 +302,8 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> { ...@@ -307,10 +302,8 @@ public class TransmittableThreadLocal<T> extends InheritableThreadLocal<T> {
// call afterExecute callback // call afterExecute callback
doExecuteCallback(false); doExecuteCallback(false);
for (Iterator<? extends Map.Entry<TransmittableThreadLocal<?>, ?>> iterator = holder.get().entrySet().iterator(); for (Iterator<TransmittableThreadLocal<?>> iterator = holder.get().iterator(); iterator.hasNext(); ) {
iterator.hasNext(); ) { TransmittableThreadLocal<?> threadLocal = iterator.next();
Map.Entry<TransmittableThreadLocal<?>, ?> next = iterator.next();
TransmittableThreadLocal<?> threadLocal = next.getKey();
// clear the TTL value only in backup // clear the TTL value only in backup
// avoid the extra value of backup after restore // avoid the extra value of backup after restore
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册