ThreadLocal的介绍及其使用
private static final ThreadLocal<Integer> THREAD_LOCAL = new ThreadLocal<>();
    @Test
    void threadLocalTest() {
        Assertions.assertDoesNotThrow(() -> {
            // 线程1存储数据
            Thread t1 = new Thread(() -> {
                THREAD_LOCAL.set(10);
                log.info("Thread 1 stored data: " + THREAD_LOCAL.get()); // 输出10
                // 清除当前线程的数据
                THREAD_LOCAL.remove();
            });
            // 线程2存储数据
            Thread t2 = new Thread(() -> {
                THREAD_LOCAL.set(20);
                log.info("Thread 2 stored data: " + THREAD_LOCAL.get()); // 输出20
                // 清除当前线程的数据
                THREAD_LOCAL.remove();
            });
            t1.start();
            t2.start();
            try {
                t1.join();
                t2.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 主线程获取数据
            log.info("Main thread data: " + THREAD_LOCAL.get()); // 输出null
            // 清除当前线程的数据
            THREAD_LOCAL.remove();
        });
    }ThreadLocal是Java中的一个线程级别的变量,它提供了一种线程内部的数据共享和访问机制。通过ThreadLocal,每个线程可以独立地存储和获取自己的数据,而不会影响其他线程。
ThreadLocal的用法如下:
- 创建ThreadLocal实例:通过ThreadLocal<T>来创建一个ThreadLocal对象,其中T表示泛型类型,代表要存储的数据类型。
- 存储数据:使用set(T value)方法将数据存储到当前线程的ThreadLocal对象中。每个线程都有自己独立的数据副本,互不干扰。
- 获取数据:使用get()方法从当前线程的ThreadLocal对象中获取数据。
- 初始化数据:可以通过重写initialValue()方法来为ThreadLocal提供初始值。该方法会在第一次调用get()或set()时被调用。
- 删除数据:可以使用remove()方法来清除当前线程的ThreadLocal对象中的数据。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号