概述
多线程访问共享数据时,涉及到线程间数据同步问题。当场景不需要用到数据共享时,提出了线程封闭的概念,数据封闭在各自的线程之中,避免数据同步。
具体实现有: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();
}
}
网友评论