1. Anwendungen in verschiedenen Frameworks
Das Spring-Framework verwendet ThreadLocal, um Verbindungen zu verwalten. Wenn eine Transaktion fehlschlägt, kann dies keinen Einfluss auf den Transaktionsprozess oder die Ergebnisse anderer Threads haben ORM-Framework und Mybatis, von denen jeder gehört hat, werden ebenso wie SqlSession von ThreadLocal verwaltet.
//Spring TransactionSynchronizationManager类 @Override protected void doBegin(Object transaction, TransactionDefinition definition) { DataSourceTransactionObject txObject = (DataSourceTransactionObject) transaction; Connection con = null; try { //此处省略N行代码 if (txObject.isNewConnectionHolder()) { //绑定数据库连接到线程中 TransactionSynchronizationManager.bindResource(obtainDataSource(), txObject.getConnectionHolder()); } } catch (Throwable ex) { if (txObject.isNewConnectionHolder()) { //当发生异常时,移除线程中的连接 DataSourceUtils.releaseConnection(con, obtainDataSource()); txObject.setConnectionHolder(null, false); } throw new CannotCreateTransactionException("Could not open JDBC Connection for transaction", ex); } }
2. Verhindern Sie Speicherlecks
private static final ThreadLocal<LoginUser> loginUserLocal = new ThreadLocal<LoginUser>(); public static LoginUser getLoginUser() { return loginUserLocal.get(); } public static void setLoginUser(LoginUser loginUser) { loginUserLocal.set(loginUser); } public static void clear() { loginUserLocal.remove(); } //在使用完后一定要清理防止内存泄露 try{ loginUserLocal.set(loginUser); //执行其他业务逻辑 }finally{ loginUserLocal.remove(); }
Das obige ist der detaillierte Inhalt vonSo wenden Sie ThreadLocal in Java an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!