神奇的TreadLocal

 

ThreadLocal太神奇了!

先看代码

 static 保存到Map 里面

privatestatic Map m = new HashMap();

   publicstaticvoid setConnection(){

           Connection conn = DB.getConnection();

      m.put("connection", conn);

      }

      publicstatic Connection getConnection(){

      return (Connection)m.get("connection");

   }

   publicstaticvoid close(Connection conn){

      DB.close(conn);

}

   缺点:多个线程并发访问,会有问题

 


 private static ThreadLocal threadLocal = new ThreadLocal();
 
 public static void setConnection(){
  Connection conn = DB.getConnection();
  threadLocal.set(conn);
 }
 
 public static Connection getConnection(){
  return(Connection) threadLocal.get();
 }
 
 public static void close(Connection conn){
  DB.close(conn);
 }

 

ThreadLocal会为每一个线程创建一个当前Threadlocal副本,当有人操作更新原始的Threadlocal时不会影响到Threadlocal副本。但是一旦你修改副本的Threadlocal时,原始ThreadLocal也会随之改变。这样就能很好的隔离每个线程的操作,保证数据的准确性。

 

 

 

 

 

 

 

你可能感兴趣的:(local)