/
public class TestThreaLocal {
//创建ThreadLocal变量
private ThreadLocal testt = new ThreadLocal();
private ThreadLocal stringThreadLocal = new ThreadLocal() {
@Override
protected String initialValue() {
return "hello";
}
};
public static void main(String[] args){
TestRunnable testThreaLocal=new TestRunnable();
Thread thread=new Thread(testThreaLocal);
Thread thread1=new Thread(testThreaLocal);
thread.start();
thread1.start();
}
}
class TestRunnable implements Runnable{
private ThreadLocal threadLocal = new ThreadLocal();
@Override
public void run() {
threadLocal.set((int) (Math.random() 1000D));
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(threadLocal.get());
}
}
import org.apache.commons.lang3.RandomUtils;
import java.util.HashMap;
import java.util.Map;
public class TestThreaLocalSelf {
private static Map<Thread, Integer> threadIntegerHashMap = new HashMap<Thread, Integer>();
public static void main(String[] args) {
for (int i = 0; i < 2; i++) {
new Thread(new Runnable() {
@Override
public void run() {
Integer random= RandomUtils.nextInt(1,100);
System.out.println("class main" + "Thread:" +
Thread.currentThread().getName() + "data:"
+random);
threadIntegerHashMap.put(Thread.currentThread(),random);
new A().print();
new B().print();
}
}).start();
}
}
static class A {
public void print() {
System.out.println("class A" + "Thread:" +
Thread.currentThread().getName() + "data:"
+ threadIntegerHashMap.get(Thread.currentThread()));
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static class B {
public void print() {
System.out.println("class B" + "Thread:" +
Thread.currentThread().getName() + "data:"
+ threadIntegerHashMap.get(Thread.currentThread()));
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class mainThread:Thread-1data:75
class mainThread:Thread-0data:94
class AThread:Thread-0data:94
class AThread:Thread-1data:75
class BThread:Thread-1data:75
class BThread:Thread-0data:94
/**
5, ThreadLoca只是起到线程间变量隔离的作用 实现原理,、 每个Thread会维持一个ThreadLocalMap,ThreadLocalMap中的key是ThreadLocal,value是要存的值,也就是ThreadLocal通过set()方法设置的值
/ public class TestThreaLocal { //创建ThreadLocal变量 private ThreadLocal testt = new ThreadLocal(); private ThreadLocal stringThreadLocal = new ThreadLocal() {
@Override
protected String initialValue() {
return "hello";
}
};
public static void main(String[] args){
TestRunnable testThreaLocal=new TestRunnable();
Thread thread=new Thread(testThreaLocal);
Thread thread1=new Thread(testThreaLocal);
thread.start();
thread1.start();
}
}
class TestRunnable implements Runnable{
private ThreadLocal threadLocal = new ThreadLocal();
@Override
public void run() {
threadLocal.set((int) (Math.random() 1000D));
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(threadLocal.get());
}
}
import org.apache.commons.lang3.RandomUtils;
import java.util.HashMap; import java.util.Map;
public class TestThreaLocalSelf { private static Map<Thread, Integer> threadIntegerHashMap = new HashMap<Thread, Integer>();
} class mainThread:Thread-1data:75 class mainThread:Thread-0data:94 class AThread:Thread-0data:94 class AThread:Thread-1data:75 class BThread:Thread-1data:75 class BThread:Thread-0data:94