谁给个ThreadLocal的简单例子
该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。
看的不是很懂,
网上的例子也找不到
特来请教
给个小例子就行了
------解决方案--------------------这样吧。你用一个类  里面定义一个ThreadLocal 随便保存一点东西。
写2个线程,一个线程将ThreadLocal的值改变一样。
  在另一个线程里面,你读取出来,你发现,线程1所做的修改仅影响到线程1,并没有影响到线程2ThreadLocal里面的值。
------解决方案--------------------你就当他是个map
而且每个线程都不共享的map
------解决方案--------------------楼主,给你写一个例子
public class MyNumber {
  //使用ThreadLocal  维护唯一的变量
  private static ThreadLocal<Integer> number = new ThreadLocal<Integer>() {
      //去看ThreadLcoal的源代码,重写initialVal()方法,否则返回null
      protected Integer initialValue() {
         return 0;
      }
  }
  //拿到下一个号码
  public Integer getNext() {
     //ThreadLocal变量在调用set或者是get方法的时候,才回去调用initialValue() 且调用一次
     number.set(number.get()+1);
     return number.get();
  }
  public static void main(String[] args) {
    MyNumber mynumber = new MyNumber();
    //这里 传入的 mynumber  是同一个对象   但是打印的结果却是相互不影响
    //因为ThreadLocal保证了每个访问该变量的线程都有一个独立的副本  
    MyThread mt1 = new MyThread(mynumber);
    MyThread mt2 = new MyThread(mynumber);
    mt1.start();
    mt2.start();
 }
}
class MyThread implements Runnable{
   private MyNumber my_number;
   public MyThread(MyNumber my_number) {
     this.my_number = my_number;
  }
  public void run() {
      for(int i=0;i<5;i++) {
          syso(Thread.currentThread.getName+"-number:"+my_number.getNext());
      }
  }
}
//以上就是一个小例子,如果有什么不懂,可以留言给我
------解决方案--------------------for example
Java code
public class Test {
    public static void main(String[] args) {
        Thread[] t = new Thread[3];
        for (int i=0; i<3; i++) {
            t[i] = new Thread() {
                public void run() {
                    for (int i=0; i<3; i++) {
                        System.out.printf("%s, id=%d, times=%s\n", getName(), SampleThreadLocal.getId(), i);
                    }
                }
            };
            t[i].start();
        }
    }
}
class SampleThreadLocal {
    private static int count = 0;
    private static final ThreadLocal <Integer> id = 
        new ThreadLocal <Integer> () {
            protected Integer initialValue() {
                return count++;
        }
    };
    public static int getId() {
        return id.get();
    }
}