572
技術社區[雲棲]
Java中線程封閉之ThreadLocal
在訪問共享數據時通常使用同步。若不使用同步則可以將對象封閉在一個線程中達到線程安全的目的,該方法稱為線程封閉(Thread Confinement)。其中實現線程封閉中規範的方法是使用ThreadLocal類。線程封閉技術一種常用的使用場景是在JDBC Connection對象。public class ConnectionHelper
{
private final static String URL = "";
private final static ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>()
{
public Connection initialValue()
{
try
{
return DriverManager.getConnection(URL);
}
catch (SQLException e)
{
throw new RuntimeException("數據庫連接有誤");
}
}
};
public static Connection getConnection()
{
return connectionHolder.get();
}
}
當初次調用ThreadLocal的get方法時就會調用intialValue來獲取初始值,可以理解為Thread<T>包含了Map<Thead,T>對象,但實際實現並不是如此。這些特定於線程的隻保存在Thread對象中,當線程終止後會被當做垃圾回收。我曾寫過《Java線程範圍變量——ThreadLocal的模擬和解釋》來模擬ThreadLocal的實現原理,請參看https://blog.csdn.net/woshixuye/article/details/10017871
最後更新:2017-04-03 07:57:12
上一篇:
mac os x下的一些小技巧
下一篇:
【AllJoyn框架-01】連接PC與Arduino Due開發板
《仿人機器人原理與實戰》一1.2 反射弧與仿人機器人設計
gitlab配置ssh密鑰及簡單使用
從Google I/O 2012看 Android 4.1的變化
JavaScript中訪問節點對象的方法有哪些?
蘋果8被人鎖定了該怎麼辦?iphone7id被鎖了怎麼才能解鎖
第14屆(2017)全國大學生信息安全與對抗技術競賽圓滿落幕
iphone開發筆記——Cocos2d CCLayer中的touch
為什麼要把jsp放在WEB-INF目錄下
linux下串口編程設置函數---------set_opt(fd1,115200,8,'N'1)--------------------
JS中數組去除重複