Java中的Real ThreadLocal用法

时间:2014-08-14 05:23:39

标签: java multithreading

刚开始学习Java ThreadLocal类型。我可以理解它的典型例子,比如定义一个类,它有一个声明为ThreadLocal的实例字段;然后在创建了这个类的对象之后,我们将这个对象传递给,比如三个独立的线程,它们每个都有自己的这个共享对象的副本。

我的问题在这里可能非常愚蠢,请原谅,为什么我们不创建尽可能多的线程,因此它(可能)会实现相同的结果?

我已经阅读了有关使用ThreadLocal的Hibernate代码:

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;  
} 

我可能的猜测是,首先,我们可能无法预测将会有多少线程;其次,假设将创建许多线程,然后为每个线程创建一个对象是非常昂贵的?

请在这里给我一些指导,专家:)

1 个答案:

答案 0 :(得分:2)

  

为什么我们不创建尽可能多的线程,因此它(可能)会实现相同的结果?

这需要知道有多少线程。更重要的是,它要求我们为对象提供足够的信息以了解它所在的线程,以便它可以检索其线程本地数据,或者我们在更高级别管理线程本地的东西并将其传递给对象。 ThreadLocal让我们以完全独立的方式实现这一点,并简化了对象接口和线程本地数据的管理。

ThreadLocal是一个很好的工具,可以为我们处理所有肮脏的工作。