【Java多线程】ThreadLocal

Synchronized是为了让多线程进行数据共享,而ThreadLocal为了让多线程进行数据隔离。

ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。
个人理解:同一个变量,每个线程都复制一份放到自己家里,当需要对这个变量进行操作的时候就操作自己家的变量。每个线程都操作自己家的,所以互不影响。

public class ConnThreadLocal {
    public static ThreadLocal<String> th = new ThreadLocal<String>();
    public void setTh(String value){
        th.set(value);
    }

    public void getTh() {
        System.out.println(Thread.currentThread().getName()+":"+this.th.get());
    }

    public static void main(String[] args) throws InterruptedException{
        final ConnThreadLocal ct = new ConnThreadLocal();
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                ct.setTh("张三");
                ct.getTh();
            }
        },"t1");

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                ct.setTh("李四");
                ct.getTh();
            }
        },"t2");
        t1.start();
        t2.start();
    }
}

运行结果:
这里写图片描述
本例中,两个线程都对ct对象进行set操作,但结果互不影响,就是因为ConnThreadLocal 类中th 是ThreadLocal类的对象,两个线程的数据是隔离的,所以会输出各自的结果,互不干扰。

猜你喜欢

转载自blog.csdn.net/zjy15203167987/article/details/80480947