19_ThreadLocal

【概述】

线程局部变量,是一种多线程间并发访问变量的解决方案。与synchronized等加锁的方式不同,ThreadLocal完全不提供锁,而使用以空间换时间的手段,为每个线程提供变量的独立副本,以保障线程安全。

从性能上讲,ThreadLocal不具有绝对的优势,在并发不是很高的时候,加锁的性能会更好,但作为一套与锁完全无关的线程安全解决方案,在并发量很高或者竞争激烈的场景,使用ThreadLocal可以在一定程度上减少锁竞争。

【实例】

public class Test{
    public static void main(String[] args) throws Exception{

        ThreadLocalDemo.setLong(666L);
        ThreadLocalDemo.setString("666sss");
        ThreadLocalDemo.getAll();

        //新线程t1
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                ThreadLocalDemo.setLong(100L);
                ThreadLocalDemo.setString("100sss");
                ThreadLocalDemo.getAll();
            }
        });

        //启动新线程t1
        t1.start();

        Thread.sleep(1000);
        ThreadLocalDemo.getAll();
    }
}

class ThreadLocalDemo{

    public static ThreadLocal<String>  localString = new ThreadLocal<>();

    public static ThreadLocal<Long> localLong = new ThreadLocal<>();

    public static void setLong(Long l){
        localLong.set(l);
    }
    public static void setString(String s){
        localString.set(s);
    }
    public static void getAll(){
        System.out.println("localString.get()=" + localString.get() + ",localLong.get()=" + localLong.get());
    }
    
}

【运行结果】

原文地址:https://www.cnblogs.com/HigginCui/p/7648017.html