import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class ThreadLocalTest {
public static Map<String,Object> data = new HashMap<>();
private static Random random = new Random();
public static class Task implements Runnable {
@Override
public void run() {
Integer i = random.nextInt(1000);
String name =Thread.currentThread().getName();
data.put(name,i);
System.out.println("线程["+name+"]生成的随机数是:" + i);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Object o = data.get(name);
System.out.println("在线程["+name+"]快结束时取出关联的数据是:" + o);
}
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
new Thread(new Task()).start();
}
}
}
}
加入Threadlocal后使用,发现线程安全
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class ThreadLocalTest {
public static Map<String,Object> data = new HashMap<>();
private static Random random = new Random();
private static ThreadLocal<Object> threadLocal =new ThreadLocal<Object>();
public static class Task implements Runnable {
@Override
public void run() {
Integer i = random.nextInt(1000);
String name =Thread.currentThread().getName();
// data.put(name,i);
threadLocal.set(i);
System.out.println("线程["+name+"]生成的随机数是:" + i);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Object o = data.get(name);
Object o = threadLocal.get();
System.out.println("在线程["+name+"]快结束时取出关联的数据是:" + o);
}
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
new Thread(new Task()).start();
}
}
}
}