Java使用ThreadLocal
示例
Java并发性中的一个有用工具是ThreadLocal–这使您可以拥有一个给定线程唯一的变量。因此,如果相同的代码在不同的线程中运行,那么这些执行将不会共享该值,而是每个线程都有其自己的变量,该变量对于线程而言是局部的。
例如,这经常用于在Servlet中建立处理请求的上下文(例如授权信息)。您可能会执行以下操作:
private static final ThreadLocal<MyUserContext> contexts = new ThreadLocal<>();
public static MyUserContext getContext() {
return contexts.get(); //get返回此线程唯一的变量
}
public void doGet(...) {
MyUserContext context = magicGetContextFromRequest(request);
contexts.put(context); //将上下文保存到本地线程-其他线程
//拨打电话不会覆盖我们的电话
try {
//商业逻辑
} finally {
contexts.remove(); //“确保”删除线程局部变量
}
}现在,您不必在MyUserContext每个方法中都使用,而可以在需要的地方使用它。当然,现在确实引入了一个需要记录的变量,但是它是线程安全的,从而消除了使用这种范围较大的变量的许多弊端。MyServlet.getContext()
这里的主要优点是,每个线程在该contexts容器中都有自己的线程局部变量。只要您从定义的入口点开始使用它(例如要求每个servlet维护其上下文,或者可能通过添加servlet过滤器),便可以在需要时依赖该上下文。
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下