javathreadlocal:Java线程:深入ThreadLocal

  ThreadLocal和线程成员变量还有区别ThreadLocal该类提供了线程局部变量这个局部变量和成员变量不ThreadLocal变量在被多个线程使用时候每个线程只能拿到该变量个副本这是Java API中描述通过阅读API源码发现并非副本副本什么概念?克隆品? 或者是别样子太模糊

  准确应该是ThreadLocal类型变量内部注册表(Map )发生了变化但ThreadLocal类型变量本身确是这才是本质!

  下面就做个例子:

  、标准例子

  定义了MyThreadLocal类创建它个对象tlt分别给 4个线程使用结果 4个线程tlt变量并没有出现共用现象 2是各用各这介绍说明 4个线程使用是tlt副本(克隆品)


 /**
  * 使用了ThreadLocal
  *
  * @author leizhimin 2010-1-5 10:35:27
  */
  public  MyThreadLocal {
  //定义了个ThreadLocal变量用来保存或Integer数据
  private ThreadLocal tl =  ThreadLocal {
  @Override
  protected Integer initialValue {
   0;
  }
  };
  public Integer getNextNum {
  //将tl值获取后加1并更新设置t1
  tl.(tl.get + 1);
   tl.get;
  }
  }
  /**
  * 测试线程
  *
  * @author leizhimin 2010-1-5 10:39:18
  */
  public  TestThread extends Thread {
  private MyThreadLocal tlt =  MyThreadLocal;
  public TestThread(MyThreadLocal tlt) {
  this.tlt = tlt;
  }
  @Override
  public void run {
  for ( i = 0; i < 3; i) {
  .out.prln(Thread.currentThread.getName + "\t" + tlt.getNextNum);
  }
  }
  }
  /**
  * ThreadLocal测试
  *
  * @author leizhimin 2010-1-5 10:43:48
  */
  public  Test {
  public  void (String args) {
  MyThreadLocal tlt =  MyThreadLocal;
  Thread t1 =  TestThread(tlt);
  Thread t2 =  TestThread(tlt);
  Thread t3 =  TestThread(tlt);
  Thread t4 =  TestThread(tlt);
  t1.start;
  t2.start;
  t3.start;
  t4.start;
  }
  }



  


="xspace-totlerecord">5="xspace-totlepages">1/5="xspace-current">12345>
Tags:  threadlocal使用 threadlocal模式 threadlocal javathreadlocal

延伸阅读

最新评论

发表评论