ThreadLocal 作为本地线程变量,使用相当方便,本文大概介绍其两种使用方法
1:单线程下,在程序的一处,对值进行保存,在另一处对其进行获取调用
import com.alibaba.fastjson.JSONObject;
import java.io.Serializable;
public class ThreadUtil implements Serializable {
private static final ThreadLocal<JSONObject> threadLocal=new ThreadLocal<>();
//本地线程变量赋值
public static void setThreadLocal(JSONObject param){
threadLocal.set(param);
}
//本地线程变量获取值
public static JSONObject getThreadLocal(){
return threadLocal.get();
}
//移除本地变量
public static void removeThreadLocal(){
threadLocal.remove();
}
}
2:多线程下,解决共享资源的争抢问题,解决只有一份资源,而造成的线程等待问题
public class ShareThreadLocal extends ThreadLocal<Map> implements Serializable {
//重写initialValue,完成赋值的初始化
@Override
protected Map initialValue() {
Map map=new HashMap();
map.put("k","v");
return map;
}
}
class test{
public static void main(String[] args) {
ShareThreadLocal local=new ShareThreadLocal();
Map map = local.get();
System.out.println(map.get("k"));
}
}