使用ThreadLocal类实现线程范围内的共享数据:
确保每个线程都有自己私有的变量和取到自己的变量。下面用ThreadLocal类实现,替代上节课中的map用法
代码:
package org.yla.thread;
import java.util.Random;
/**
* 使用ThreadLocal类实现线程范围内的私有数据
* 替代上节课map的作用
* @author huo_chai_gun
* 2014年12月18日下午3:25:35
*/
public class ThreadLocalTest {
private static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>();
public static void main(String[] args) {
//启动两个线程
for (int i = 0; i < 2; i++) {
new Thread(new Runnable() {
@Override
public void run() {
//创建每个线程私有的变量
int data = new Random().nextInt(100);
System.out.println(Thread.currentThread().getName()+" has put data: "+data);
//往local里面设置值
threadLocal.set(data);
new A().get();
new B().get();
}
}).start();
}
}
static class A{
public void get(){
int data =threadLocal.get();
System.out.println("A from "+Thread.currentThread().getName()+" has get data: "+data);
}
}
static class B{
public void get(){
int data =threadLocal.get();
System.out.println("B from "+Thread.currentThread().getName()+" has get data: "+data);
}
}
}
运行结果:
Thread-0 has put data: 48
Thread-1 has put data: 95
A from Thread-1 has get data: 95
A from Thread-0 has get data: 48
B from Thread-0 has get data: 48
B from Thread-1 has get data: 95
假设我们有多个线程需要范围内的共享数据,那么我们的代码就得改成下面的形式了&#