当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:15:00  来源:本站整理

ThreadLocal的筹划与操纵[Java编程]

赞助商链接



  本文“ThreadLocal的筹划与操纵[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

早在Java 1.2推出之时,Java平台中就引入了一个新的支持:java.lang.ThreadLocal,给我们在编写多线程程序时供应了一种新的挑选.利用这个工具类可以很简便地编写出美好的多线程程序,固然ThreadLocal非常有效,但是仿佛目前理解它、利用它的朋友还不多.

ThreadLocal是什么

ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并非一个Thread,而是thread local variable(线程部分变量).大概把它命名为ThreadLocalVar越发符合.线程部分变量(ThreadLocal)其实的功用非常简单,就是为每一个利用该变量的线程都供应一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和别的线程的副本冲突.从线程的角度看,就仿佛每一个线程都完好拥有该变量.线程部分变量并非Java的新创造,在别的的一些语言编译器实现(如IBM XL FORTRAN)中,它在语言的层次供应了直接的支持.因为Java中没有供应在语言层次的直接支持,而是供应了一个ThreadLocal的类来供应支持,所以,在Java中编写线程部分变量的代码相对对比拙笨,这大概是线程部分变量没有在Java中得到很好的遍及的一个缘由吧.

ThreadLocal的计划

首先看看ThreadLocal的接口:

Object get() ; // 返回当前线程的线程部分变量副本 protected Object initialValue(); // 返回该线程部分变量的当前线程的初始值void set(Object value); // 设置当前线程的线程部分变量副本的值

ThreadLocal有3个办法,此中值得注意的是initialValue(),该办法是一个protected的办法,明显是为了子类重写而特地实现的.该办法返回当前线程在该线程部分变量的初始值,这个办法是一个耽误调用办法,在一个线程第1次调用get()大概set(Object)时才履行,并且仅履行1次.ThreadLocal中的确切实现直接返回一个null:

protected Object initialValue() { return null; }

ThreadLocal是若何做到为每一个线程保护变量的副本的呢?其实实现的思绪很简单,在ThreadLocal类中有一个Map,用于存储每一个线程的变量的副本.比方下面的示例实现:

public class ThreadLocal
{
  private Map values = Collections.synchronizedMap(new HashMap());
  public Object get()
  {
   Thread curThread = Thread.currentThread();
   Object o = values.get(curThread);
   if (o == null && !values.containsKey(curThread))
   {
    o = initialValue();
    values.put(curThread, o);
   }
   return o;
  }
  public void set(Object newValue)
  {
   values.put(Thread.currentThread(), newValue);
  }
  public Object initialValue()
  {
   return null;
  }
}

当然,这并非一个产业强度的实现,但JDK中的ThreadLocal的实现总体思绪也近似于此.


  以上是“ThreadLocal的筹划与操纵[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • Java多线程之ThreadLocal
  • ThreadLocal的筹划与操纵
  • 操作ThreadLocal情势管理Session
  • JVM TI学习(1) 若何中止weblogic中stuck thread
  • [JAVA100例]060、承当Thread
  • 用Java代码来触发生成ThreadDump
  • 诊断Java代码:孤线程(Orphaned Thread)错误情势
  • TThread
  • <b>Java多线程初学者指南(2):用Thread类成立线程</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .