java面试-ThreadLocal

线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。

ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问时, 能保证各个线程的变量相对独立于其他线程内的变量。

/**
 * @author chong.zuo
 * @date 2020/12/29 17:03
 *
 *  1.传递数据:通过ThreadLocal类在同一个线程不同组件中传递共享数据。
 *  2.线程隔离:ThreadLocal提供线程局部变量,每个线程变量都是独立的,不会相互影响。
 */
public class ThreadLocalTest {

    static ThreadLocal<String> tl = new ThreadLocal<>();

    private String content;

    public String getContent() {
        String content = tl.get();
        return content;
    }

    public void setContent(String content) {
        tl.set(content);
        //this.content = content;
    }

    public static void main(String[] args) {
        ThreadLocalTest test = new ThreadLocalTest();

        for (int i = 0; i < 5; i++) {

            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    test.setContent(Thread.currentThread().getName() + "的数据");
                    System.out.println("=====================================");
                    System.out.println(Thread.currentThread().getName() + "----->" + test.getContent());


                }
            }, "thread" + i);

            thread.start();
            //解绑当前线程绑定的对象, 防止内存泄漏
            tl.remove();
        }


    }
}

ThreadLocal与volatile区别:

volatile: 多线程访问共享变量的可见性, 线程内存变量副本对主内存变量的可见性。

ThreadLocal: threadlocal类提供线程局部变量, 每个线程的变量都是独立的相互隔离的。

原文地址:https://www.cnblogs.com/chong-zuo3322/p/14183824.html