修复: ThreadLocal在高并发下重复获取对象导致put值丢失
This commit is contained in:
parent
1d0d314aee
commit
268f46b872
|
|
@ -3,8 +3,9 @@ package com.mdd.admin;
|
||||||
import com.mdd.common.util.ListUtils;
|
import com.mdd.common.util.ListUtils;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentSkipListMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 本地线程
|
* 本地线程
|
||||||
|
|
@ -19,17 +20,18 @@ public class LikeAdminThreadLocal {
|
||||||
/**
|
/**
|
||||||
* 取得本地线程对象
|
* 取得本地线程对象
|
||||||
*/
|
*/
|
||||||
private static final java.lang.ThreadLocal<LinkedHashMap<String, Object>> MY_LOCAL = new java.lang.ThreadLocal<>();
|
private static final java.lang.ThreadLocal<Map<String, Object>> MY_LOCAL = new java.lang.ThreadLocal<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 写入本地线程
|
* 写入本地线程
|
||||||
*/
|
*/
|
||||||
public static void put(String key, Object val) {
|
public static void put(String key, Object val) {
|
||||||
LinkedHashMap<String, Object> map = MY_LOCAL.get();
|
Map<String, Object> map = MY_LOCAL.get();
|
||||||
if (map == null) {
|
if (map == null) {
|
||||||
map = new LinkedHashMap<>();
|
synchronized (MY_LOCAL) {
|
||||||
|
map = new ConcurrentSkipListMap<>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
map.put(key, val);
|
map.put(key, val);
|
||||||
MY_LOCAL.set(map);
|
MY_LOCAL.set(map);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package com.mdd.front;
|
package com.mdd.front;
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentSkipListMap;
|
||||||
|
|
||||||
public class LikeFrontThreadLocal {
|
public class LikeFrontThreadLocal {
|
||||||
|
|
||||||
|
|
@ -13,17 +13,18 @@ public class LikeFrontThreadLocal {
|
||||||
/**
|
/**
|
||||||
* 取得本地线程对象
|
* 取得本地线程对象
|
||||||
*/
|
*/
|
||||||
private static final java.lang.ThreadLocal<LinkedHashMap<String, Object>> MY_LOCAL = new java.lang.ThreadLocal<>();
|
private static final java.lang.ThreadLocal<Map<String, Object>> MY_LOCAL = new java.lang.ThreadLocal<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 写入本地线程
|
* 写入本地线程
|
||||||
*/
|
*/
|
||||||
public static void put(String key, Object val) {
|
public static void put(String key, Object val) {
|
||||||
LinkedHashMap<String, Object> map = MY_LOCAL.get();
|
Map<String, Object> map = MY_LOCAL.get();
|
||||||
if (map == null) {
|
if (map == null) {
|
||||||
map = new LinkedHashMap<>();
|
synchronized (MY_LOCAL) {
|
||||||
|
map = new ConcurrentSkipListMap<>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
map.put(key, val);
|
map.put(key, val);
|
||||||
MY_LOCAL.set(map);
|
MY_LOCAL.set(map);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue