ThreadLocal 解決多線程程序的並發問題+事務處理


ThreadLocal 本地線程變量:

private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
  tl.get():獲取的就是當前線程中map{tl:conn}中的conn
  tl.set(conn):向當前線程中的map中保存一個元素{tl:conn}
  tl.remove():從當前線程中的map移除key為tl的元素
  initialValue():當調用get()獲取當前線程的map中元素時,如果不存在,則調用該方法創建一個,並保存到map中

 

 

 1 import java.sql.Connection;
 2 import java.sql.SQLException;
 3 
 4 public class TranManager {
 5     private static ThreadLocal<Connection> tl=
 6                     new ThreadLocal<Connection>(){
 7         /**
 8          * 內部方法 
 9          * 返回回該線程局部變量的初始值
10          * 初始化線程,每次get()或者set(object)的時候會被調用。
11          */
12         protected Connection initialValue() {
13             try {
14                 return DaoUtils.getConn();
15             } catch (Exception e) {
16                 e.printStackTrace();
17                 return null;
18             }
19         }
20     };
21     private TranManager(){}
22     public static  Connection getConn(){
23         return tl.get();
24     }
25     /**
26      * @return 開啟手動提交事務,
27      * @false: 將sql命令交給應用程序管理 
28      */
29     public static void startTran(){
30         try {
31             tl.get().setAutoCommit(false);
32         } catch (SQLException e) {
33             e.printStackTrace();
34         }
35     }
36     /**
37      * @return 回滾
38      */
39     public static void rollbackTran(){
40         try {
41             tl.get().rollback();
42         } catch (SQLException e) {
43             e.printStackTrace();
44         }
45     }
46     /**
47      * @return 執行
48      */
49     public static void commitTran(){
50         try {
51             tl.get().commit();
52         } catch (SQLException e) {
53             e.printStackTrace();
54         }
55     }
56     /**
57      * @return 關閉
58      */
59     public static void release(){
60         try {
61             tl.get().close();
62             tl.remove();//map{tl:conn}
63         } catch (SQLException e) {
64             e.printStackTrace();
65         }
66     }
67     /*public void rollbackTran(Savepoint sp){
68         try {
69             conn.rollback(sp);
70             conn.commit();
71         } catch (SQLException e) {
72             e.printStackTrace();
73         }
74     }*/
75 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM