1. Aplikasi dalam pelbagai rangka kerja
Rangka kerja Spring menggunakan ThreadLocal untuk mengurus sambungan dalam pengurusan transaksi, dan setiap rangkaian adalah Sambungan berasingan, apabila transaksi gagal, ia tidak boleh menjejaskan proses urus niaga atau hasil urutan lain Rangka kerja ORM dan Mybatis yang semua orang pernah dengar juga diuruskan oleh ThreadLocal, seperti SqlSession.
//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. Elakkan kebocoran memori
Biasanya kami menggunakan kaedah berikut untuk mengendalikan ThreadLocal, kami mesti mengeluarkannya untuk mengelakkan kebocoran memori. .
rreeeeAtas ialah kandungan terperinci Bagaimana untuk menggunakan ThreadLocal dalam java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!