读书人

应用ThreadLocal来存储Session,以便实

发布时间: 2012-12-27 10:17:10 作者: rapoo

使用ThreadLocal来存储Session,以便实现Session any where

早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。

ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。

当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。

从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思。

所以,在Java中编写线程局部变量的代码相对来说要笨拙一些,因此造成线程局部变量没有在Java开发者中得到很好的普及。

ThreadLocal的接口方法

ThreadLocal类接口很简单,只有4个方法:

?

public class ThreadContextHolder  {protected static final Logger logger = Logger.getLogger(ThreadContextHolder.class);private static ThreadLocal<HttpServletRequest> HttpRequestThreadLocalHolder = new ThreadLocal<HttpServletRequest>();private static ThreadLocal<HttpServletResponse> HttpResponseThreadLocalHolder = new ThreadLocal<HttpServletResponse>();public static void setHttpRequest(HttpServletRequest request){HttpRequestThreadLocalHolder.set(request);}public static HttpServletRequest getHttpRequest(){return  HttpRequestThreadLocalHolder.get();}public static void setHttpResponse(HttpServletResponse response){HttpResponseThreadLocalHolder.set(response);}public static HttpServletResponse getHttpResponse(){return HttpResponseThreadLocalHolder.get();}}

?1

读书人网 >编程

热点推荐