2011-02-28 51 views
3

在外行人說話時,當有人說某個對象是Java中的線程本地單例時,這意味着什麼?我當時正在講關於Java Server Faces的講座,每次講到FacesContext時 - 講師總是提醒我們,它是一個線程本地單例。java threadlocal singleton - 它是什麼?

回答

13

每個線程只有一個FacesContext的唯一實例。

FacesServlet在HTTP servlet請求的開始處創建一個ThreadLocal<FacesContext>,並在與HTTP servlet請求關聯的HTTP servlet響應結束時將其除去。無論何時在JSF代碼中執行FacesContext#getCurrentInstance(),都將始終在整個HTTP Servlet請求/響應處理中獲得同一個實例。

由於HTTP servlet請求由不同的線程執行,FacesContext實例附加作爲線程本地變量到單個線程,沒有兩個HTTP servlet請求共享相同FacesContext實例。