线程本地存储是解决多个线程共享一个资源(资源共享)的另一种方式。它相当于一个Map<Thread, Object>, 把一个线程和它的状态(数据)关联起来。
上代码
package com.lyj; /** * 防止多个线程共享一个资源-----去除对变量的共享 * 线程本地存储 java.lang.ThreadLocal类,相当于一个Map<Thread, Object> * */ import java.util.Random; public class ThreadLocalDemo { private static ThreadLocal<Integer> value = new ThreadLocal<Integer>(); private static ThreadLocal<MyInfo> myInfoData = new ThreadLocal<MyInfo>(); public static void main(String[] args) { //产生2个线程 for (int i = 0; i < 2; i++) { new Thread(new Runnable() { @Override public void run() { int data = new Random().nextInt(); System.out.println(Thread.currentThread().getName() + " " + data); // 保存当前线程的数据 // 相当于一个Map; value.set(data); // 保存一个打包的对象 // 存放多个数据 MyInfo myInfo = new MyInfo(); myInfo.setName("lyj"); myInfo.setAge(20); myInfoData.set(myInfo); new A().get(); //new B().get(); } }).start(); } } static class A { private static void get() { int data = value.get(); MyInfo myinfo = myInfoData.get(); System.out.println("A " + Thread.currentThread().getName() + " " + data + " " + myinfo.getName() + " " + myinfo.getAge()); } } static class B { private static void get() { int data = value.get(); System.out.println("B " + Thread.currentThread().getName() + " " + data); } } static class MyInfo { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } }