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. メモリリークを防ぐ
rree
以上がJavaでThreadLocalを適用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。