import java.util.*;
/**
简单的测试类,测试ThreadLocal如何使用,及和普通变量的区别
测试 方法
javac ThreadLocalTest.java
java ThreadLocalTest
**/
public class ThreadLocalTest {
public static void main(String args[]){
//启动4个线程测试MyThreadLocal中变量tl和num的变化
MyThreadLocal mt = new MyThreadLocal();
MyThread t1 = new MyThread(mt);
MyThread t2 = new MyThread(mt);
MyThread t3 = new MyThread(mt);
MyThread t4 = new MyThread(mt);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class MyThread extends Thread
{
private MyThreadLocal user ;
public MyThread(MyThreadLocal para){
user = para;
}
public void run(){
for(int i=0;i<3;i++){
System.out.println(Thread.currentThread().getName()+"\t"+user.getNext()+"\t"+user.getNextNum());
}
}
}
class MyThreadLocal
{
private ThreadLocal<Integer> tl = new ThreadLocal<Integer>(){
protected Integer initialValue() {
return 0;
}
};
private Integer num = 0;
public Integer getNext(){
tl.set(tl.get()+1);
return tl.get();
}
public Integer getNextNum(){
num = num+1;
return num;
}
}
//自己实现的ThreadLocal
class SimpleThreadLocal {
private Map valueMap = Collections.synchronizedMap(new HashMap());
public void set(Object newValue) {
valueMap.put(Thread.currentThread(), newValue);
}
public Object get() {
Thread currentThread = Thread.currentThread();
Object o = valueMap.get(currentThread);
if (o == null && !valueMap.containsKey(currentThread)) {
o = initialValue();
valueMap.put(currentThread, o);
}
return o;
}
public void remove() {
valueMap.remove(Thread.currentThread());
}
public Object initialValue() {
return null;
}
}
/**
简单的测试类,测试ThreadLocal如何使用,及和普通变量的区别
测试 方法
javac ThreadLocalTest.java
java ThreadLocalTest
**/
public class ThreadLocalTest {
public static void main(String args[]){
//启动4个线程测试MyThreadLocal中变量tl和num的变化
MyThreadLocal mt = new MyThreadLocal();
MyThread t1 = new MyThread(mt);
MyThread t2 = new MyThread(mt);
MyThread t3 = new MyThread(mt);
MyThread t4 = new MyThread(mt);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class MyThread extends Thread
{
private MyThreadLocal user ;
public MyThread(MyThreadLocal para){
user = para;
}
public void run(){
for(int i=0;i<3;i++){
System.out.println(Thread.currentThread().getName()+"\t"+user.getNext()+"\t"+user.getNextNum());
}
}
}
class MyThreadLocal
{
private ThreadLocal<Integer> tl = new ThreadLocal<Integer>(){
protected Integer initialValue() {
return 0;
}
};
private Integer num = 0;
public Integer getNext(){
tl.set(tl.get()+1);
return tl.get();
}
public Integer getNextNum(){
num = num+1;
return num;
}
}
//自己实现的ThreadLocal
class SimpleThreadLocal {
private Map valueMap = Collections.synchronizedMap(new HashMap());
public void set(Object newValue) {
valueMap.put(Thread.currentThread(), newValue);
}
public Object get() {
Thread currentThread = Thread.currentThread();
Object o = valueMap.get(currentThread);
if (o == null && !valueMap.containsKey(currentThread)) {
o = initialValue();
valueMap.put(currentThread, o);
}
return o;
}
public void remove() {
valueMap.remove(Thread.currentThread());
}
public Object initialValue() {
return null;
}
}
没有评论:
发表评论