[英]java ThreadLocal proplem
private HttpServletRequest request;
private static ThreadLocal<WebContext> wcHolder = new ThreadLocal<WebContext>();
private WebContext(){}
public static WebContext newInstance(HttpServletRequest request){
//case 1:correct
// WebContext wc = new WebContext();
// wc.request = request;
//case 2:incorrect
//(to resolve multiply creat WebContext object within one request)
WebContext wc = wcHolder.get();
if(wc==null){
wc = new WebContext();
wc.request = request;
wcHolder.set(wc);
}
return wc;
}
案例1是正確的。
但案例2
問題是:
ps:對不起,我的英語不好。 :)
- Thread上的一個ThreadLocal綁定不對嗎?
ThreadLocal
將單獨的對象綁定到每個線程,是的。 這是它的目的。
- 是一個tomcat請求是一個線程不對嗎?
每個請求都由一個線程處理,但我相當確定Tomcat不會為每個請求生成一個新線程。 它使用線程池。
此外,同一會話中的不同請求可以由不同的線程服務。
- 上面的代碼有多正確?
如果以前的答案沒有解釋,那么我不知道,因為你不清楚你認為你認為不正確的行為的方式。
然而,如果你的意圖是每個請求只有一個WebContext
,它是唯一的,那么ThreadLocal
似乎是管理它的糟糕選擇。 另一方面,請求屬性是為了這個目的而設計的。 請參閱ServletRequest.getAttribute() , ServletRequest.setAttribute() 等 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.