码迷,mamicode.com
首页 > 编程语言 > 详细

线程范围内的线程共享(多线程)

时间:2017-05-21 15:22:06      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:read   new t   范围   reads   ini   actor   不同   com   row   

首先介绍一下两个方法:

1.通过Map进行实现

  主键为Thread ,value 为数据,

  主要思路为:与线程绑定,不同的线程之间的数据相互独立 

 

2.通过ThreadLocal 实现

  首先先介绍一下ThreadLocal 的原理

  每个Thread ,都有一个ThreadLocalMap ,所以每次通过ThreadLocal .get的时候,相当于是在当前线程的ThreadLocalMap  查查找 key为 ThreadLocal(调用者)的value值。

技术分享

这个是ThreadLocal  get方法的源码

 

ThreadLocal的主要应用场景:

1.用来解决数据库连接、Session管理

    private static ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>() {  
        public Connection initialValue() {  
            return DriverManager.getConnection(DB_URL);  
        }  
    };  
      
    public static Connection getConnection() {  
        return connectionHolder.get();  
    }  

 

private static final ThreadLocal threadSession = new ThreadLocal();  
  
public static Session getSession() throws InfrastructureException {  
    Session s = (Session) threadSession.get();  
    try {  
        if (s == null) {  
            s = getSessionFactory().openSession();  
            threadSession.set(s);  
        }  
    } catch (HibernateException ex) {  
        throw new InfrastructureException(ex);  
    }  
    return s;  
}  

 2.第二个场景用于:

  线程多实例,需要保存分离每个线程的数据

 

 

 

线程范围内的线程共享(多线程)

标签:read   new t   范围   reads   ini   actor   不同   com   row   

原文地址:http://www.cnblogs.com/lizhiyan-world/p/6884893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!