Heim > Java > javaLernprogramm > So wenden Sie ThreadLocal in Java an

So wenden Sie ThreadLocal in Java an

PHPz
Freigeben: 2023-05-04 13:01:06
nach vorne
1528 Leute haben es durchsucht

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);
    }
}
Nach dem Login kopieren

2. Verhindern Sie Speicherlecks

Normalerweise verwenden wir die folgende Methode, um ThreadLocal zu betreiben. Nach der Verwendung von Threadlocal müssen wir es entfernen, um Speicherlecks zu verhindern.

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();
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage