• java之ThreadLocal


    一、ThreadLocal简介(多个线程访问共享变量时,每个线程都Copy一份该变量的副本,存放在Thread.threadLocals变量中,避免共享变量被其他线程改变而导致所有线程访问的变量随着变化的问题,即线程不安全)
    多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线程访问出现线程不安全的方法,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的都是线程自己的变量这样就不会存在线程不安全问题。
    二、ThreadLocal简单使用
    public static ThreadLocal<String> localVar = new ThreadLocal<>();
        static void print(String str) {
            //打印当前线程中本地内存中本地变量的值
            System.out.println(str + " :" + localVar.get());
            //清除本地内存中的本地变量
            localVar.remove();
        }
        @Test
        public void test() {
            Thread t1  = new Thread(() -> {
                //设置线程1中本地变量的值
                localVar.set("localVar1");
                //调用打印方法
                print("thread1");
                //打印本地变量
                System.out.println("after remove : " + localVar.get());
            });
            Thread t2  = new Thread(() -> {
                //设置线程1中本地变量的值
                localVar.set("localVar2");
                //调用打印方法
                print("thread2");
                //打印本地变量
                System.out.println("after remove : " + localVar.get());
            });
            t1.start();
            t2.start();
        }
    

    结果
    thread1 :localVar1
    thread2 :localVar2
    after remove : null
    after remove : null
    源码解析参考:https://www.jb51.net/article/214671.htm

  • 相关阅读:
    break,continue,return的区别
    java中for循环的优化
    Jquery中click函数调用遇到的诡异问题
    MVC中Controller与View的类型绑定问题
    基于8019芯片的在9S12下移植成功的TCP/IP协议族(续)
    MVC中Partialiew使用的一点小总结
    基于8019芯片的在9S12下移植成功的TCP/IP协议族(一)
    9S12单片机的模块驱动程序备忘
    prim算法(zoj1203)
    win7下安装fedora
  • 原文地址:https://www.cnblogs.com/xsj1989/p/16531727.html
Copyright © 2020-2023  润新知