java 並發基礎
阿新 • • 發佈:2019-03-25
oca 設置 rman thread url urn ger class set
ThreadLocal
允許將每個線程與持有數值的對象關聯在一起,提供get,set訪問器,為每個使用它的線程維持一份單獨的拷貝。所以,get總是返回由當前執行線程通過set設置的最新值。
例通過ThreadLocal存儲jdbc數據庫連接使其成為線程安全的。
private static ThreadLocal<Connection> conn=new ThreadLocal<Connection>(){ public Connection initialValue(){ return DriverManager.getConnection(DB_URL); } } public static Connection getConnection(){ return conn.get(); }
線程首次調用ThreadLocal.get方法時,會請求initialValue提供一個初始值。
概念上來說,可以將ThreadLocal<T>看作map<Thread,T>,它存儲了線程相關的值,不過事實上它並非這樣實現的,與線程相關的值存儲在線程對象自身中,線程終止後,這些值會被垃圾回收。
相比全局變量,線程本地變量會降低可重用性,引入隱晦的類間耦合。
java 並發基礎