码迷,mamicode.com
首页 > 其他好文 > 详细

ThreadLocal

时间:2016-03-31 00:15:09      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

引自:http://ifeve.com/threadlocal%e4%bd%bf%e7%94%a8/

ThreadLocal的官方API解释为:

“该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。”

大概的意思有两点:

  1. ThreadLocal提供了一种访问某个变量的特殊方式:访问到的变量属于当前线程,即保证每个线程的变量不一样,而同一个线程在任何地方拿到的变量都是一致的,这就是所谓的线程隔离。
  2. 如果要使用ThreadLocal,通常定义为private static类型,在我看来最好是定义为private static final类型。(可以放在一个虚类中,此虚类继承Runnable接口,自己的Runnable去实现这个接口)

 

public class TreadLocalTest {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

private static final ThreadLocal<HashMap> threadLocal = new ThreadLocal<HashMap>() {

@Override
protected HashMap initialValue() {

System.out.println(Thread.currentThread().getName()
+ "initialValue");

return new HashMap();

}

};

public static class T1 implements Runnable {

// private final static Map map = new HashMap();

private int id;

public T1(int id) {

this.id = id;

}

public void run() {

Map map = threadLocal.get();
Random random = new Random();
for (int i = 0; i < 6; i++) {
int a = random.nextInt(5);
map.put(i, i + id * 100 + a);

System.out
.println(Thread.currentThread().getName() + " i:" + i
+ " a:" + a + " time:" + sdf.format(new Date()) + map);
try {

Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() +
" i:" + i
+ " a:" + a +
" time:" + sdf.format(new Date()) + " value:"
+ map.get(i) + map);
} catch (Exception ex) {

}

}

System.out.println(Thread.currentThread().getName()

+ "# map.size()=" + map.size() + " # " + map);

}

}

public static void main(String[] args) {

Thread[] runs = new Thread[4];

T1 t = new T1(1);

for (int i = 0; i < runs.length; i++) {

runs[i] = new Thread(t);

}

for (int i = 0; i < runs.length; i++) {

runs[i].start();

}

}
}

ThreadLocal

标签:

原文地址:http://www.cnblogs.com/fanguangdexiaoyuer/p/5339443.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!