ホームページ  >  記事  >  Java  >  JavaでThreadLocalを適用する方法

JavaでThreadLocalを適用する方法

PHPz
PHPz転載
2023-05-04 13:01:061464ブラウズ

1. さまざまなフレームワークのアプリケーション

#ThreadLocal は Spring Framework のトランザクション管理で接続を管理するために使用され、各スレッドは別個の Connection になります。トランザクションが失敗しても、トランザクション プロセスや他のスレッドの結果に影響を与えることはできません。誰もが聞いたことがある ORM フレームワークと Mybatis も、SqlSession と同様に ThreadLocal によって管理されます。

//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. メモリリークを防ぐ

通常、ThreadLocal を操作するには次の方法を使用しますが、ThreadLocal を使用した後は、メモリリークを防ぐためにスレッドローカルを削除する必要があります。 。

rree

以上がJavaでThreadLocalを適用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。