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 ThreadLocaltl= 6 new ThreadLocal (){ 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 }