ThreadLocal是Java语言中的一个线程内部存储类,可以用来在多线程环境下保证每个线程都拥有自己独立的变量副本,避免了多线程间的数据共享问题。
ThreadLocal的使用方式非常简单,只需要创建一个ThreadLocal对象,然后使用它的get()和set()方法即可。每个ThreadLocal对象都会维护一个变量副本,这个副本只能被当前线程访问和修改,其他线程无法访问。
示例代码如下:
public class MyThread implements Runnable {// 创建ThreadLocal对象private ThreadLocal<Integer> threadLocal = new ThreadLocal<>();@Overridepublic void run() {// 设置当前线程的变量副本threadLocal.set((int) (Math.random() * 100));try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}// 获取当前线程的变量副本并输出System.out.println("ThreadLocal value for thread " + Thread.currentThread().getName() + " is " + threadLocal.get());}
}public class ThreadLocalDemo {public static void main(String[] args) {MyThread myThread = new MyThread();// 创建三个线程并启动new Thread(myThread, "Thread-1").start();new Thread(myThread, "Thread-2").start();new Thread(myThread, "Thread-3").start();}
}
在上面的示例代码中,我们创建了一个MyThread类实现了Runnable接口,然后在run()方法中使用ThreadLocal对象来存储和获取当前线程的变量副本。最后,我们创建了三个线程并启动,每个线程都会生成一个随机数并打印出来,由于每个线程都有自己独立的变量副本,因此它们之间不会相互干扰。