线程封闭

2020-01-02  本文已影响0人  任性一把

概述

多线程访问共享数据时,涉及到线程间数据同步问题。当场景不需要用到数据共享时,提出了线程封闭的概念,数据封闭在各自的线程之中,避免数据同步。

具体实现有:ThreadLocal 局部变量

ThreadLocal

java 中特殊的变量,它是线程级别的变量,每个线程独立拥有,避免并发编程时线程安全问题。

用法:ThreadLocal<T> var = new ThreadLocal<>();

会自动给每个线程创建一个T副本,副本间独立,互不影响。

代码演示:

public class Demo7 {
    public ThreadLocal<String> value = new ThreadLocal<>();

    public void ThreadLocalTest() throws InterruptedException{
        value.set("222222222");

        String v = value.get();

        System.out.println("线程1执行之前,主线程取到的值:" + v);

        new Thread(()->{
            String d = value.get();
            System.out.println("线程1取到的值:" + d);

            value.set("3333333333333");

            d = value.get();
            System.out.println("重新设置之后,线程1取到的值:" + d);
            System.out.println("线程1执行结束");

        }).start();


        Thread.sleep(5000L); // 等待所有线程执行结束

        v = value.get();
        System.out.println("线程1执行之后,主线程取到的值:" + v);
    }

    public static void main(String[] args) throws Exception{
        new Demo7().ThreadLocalTest();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读