ThreadLocal类的使用

          维持线程封闭性的一种更规范方法是使用ThreadLocal,这个类能使线程中的某个值与保存值得对象关联起来。ThreadLocal提供了get与set等访问接口或方法,这些方法为每个使用该变量的线程都存有一份独立的副本,因此get总是返回由当前执行线程在调用set时设置的最新值。

         ThreadLocal对象通常用于防止对可变的单实例变量(Singleton)或全局变量进行共享。例如,在单线程应用中可能会维持一个全局的数据库连接,并在程序启动时初始化这个连接对象,从而避免在调用每个方法时都要传递一个Connection对象。由于JDBC的连接对象不一定是线程安全的,因此,当多线程应用程序在没有协同的情况下使用全局变量时,就不是线程安全的。通过将JDBC的连接保存在ThreadLocal对象中,每个线程都会拥有属于自己的连接,如程序清单3-10中的ConnectionHolder所示。

         

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

   同理,在Android的开发过程中,也用到了ThreadLocal,使用ThreadLocal来保存消息队列,使用Handler来进行处理消息队列里面的消息,这也是在每个ActivityUI线程中,能够进行异步共享消息的核心思想。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值