Rumah >Java >javaTutorial >Bagaimana untuk menggunakan ThreadLocal dalam java

Bagaimana untuk menggunakan ThreadLocal dalam java

PHPz
PHPzke hadapan
2023-05-04 13:01:061497semak imbas

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. .

rreeee

Atas ialah kandungan terperinci Bagaimana untuk menggunakan ThreadLocal dalam java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam