事務處理中的ThreadLocal的使用

2021-07-05 05:27:54 字數 1336 閱讀 7400

所謂threadlocal,簡單一點想,就是乙個全域性的map,map的key是執行緒物件,value是你要儲存的物件

進入某個執行緒後,就可以從map中取得之前儲存的相應執行緒關聯的物件。

nt:threadlocal並不是乙個map,但用map來理解是沒有問題的

確保所有的sql語句都在同乙個開啟了事務的鏈結上執行,這時候就可以使用threadlocal來解決這個問題。

解決思路:

**實現:

//繫結開啟了鏈結的connection到threadlocal的jdbcutils工具類

public

class jdbcutils

conn.setautocommit(false);

}catch (exception e)

}public

static

void

committransaction()

}catch (exception e)

}public

static connection getconnection() throws sqlexception

return conn;

}catch (exception e)

}}//在服務層用上threadlocal的事務管理

public

void

transfer2(int sourceid,int targetid,double money) throws sqlexceptionfinally}}

//持久層,獲取繫結在當前執行緒上的connection,進行操作

public account find(int id)catch (exception e)

}

在上面的**中將threadlocal物件做成了靜態

private static threadlocal tl = new threadlocal(); //map

因此,每次開啟一條執行緒,threadlocal都會有乙個connection加進來,所以,我們要記得將這些connection移除,不然

這個threadlocal靜態物件會越變越大,最後導致程式掛掉!!!!!!

-> 即,在關閉鏈結是,把變數移除

public

static

void

closeconnection()

}catch (exception e) finally

}

PHP MYSQLI中事務處理

mysql事務處理讓所有sql語句執行成功後才去處理,如果有一條沒有成功或者報錯就會回滾事務,防止敏感操作處理失敗。mysql中只有innodb和bdb型別的資料表才能支援事務處理!其它型別是不支援的!mysqli autocommit false 關閉自動提交功能 sql update users...

PHP MYSQLI中事務處理

mysql事務處理讓所有sql語句執行成功後才去處理,如果有一條沒有成功或者報錯就會回滾事務,防止敏感操作處理失敗。mysql中只有innodb和bdb型別的資料表才能支援事務處理!其它型別是不支援的!mysqli autocommit false 關閉自動提交功能 sql update users...

C 中的事務處理

一般的資料庫事務控制要求事務裡所做的操作必須在同乙個資料庫內,這樣在出現錯誤的時候才能回滾 rllback 到初始狀態。這就存在乙個問題,在分布式應用程式中,往往需要同時操作多個資料庫,使用資料庫本身的事務處理,很難滿足程式對事務控制的要求。在com 中,提供了完整的事務服務,可以利用它來完成在分布...