Java线程封闭

java是如何保持线程之间的不互相干扰?

  • 线程封闭
    • Ad-hoc线程封闭:程序控制,最糟糕,忽略
    • 堆栈封闭:局部变量(利用不同的虚拟机栈副本存储)
    • ThreadLocal线程封闭:特别好的封闭方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//ThreadLocal线程封闭
public class RequestHolder {

private final static ThreadLocal<Long> requestHolder = new ThreadLocal<Long>();

public static void add(Long id){
requestHolder.set(id);
}

public static Long getId(){
//自动获取key(当前线程对象地址),找出value值返回
return requestHolder.get();
}

public static void remove(){
//数据会一直存到项目重启
//数据一定要移除,避免产生内存溢出(oom)
requestHolder.remove();
}
}