zoukankan      html  css  js  c++  java
  • 线程封闭threadlocal和栈封闭

    ThreadLocal是java里面的特殊变量

    他是一个线程级别的变量,每个线程都有一个threadlocal就是每个线程都有自己的独立的一个变量

    竞争状态下被彻底消除了,在并发模式下是绝对安全的变量

    用法:Thread Local<T> var =new THreadLocal<T>();

    会自动在那个线程中创建一个T的副本副本之间彼此独立不会影响

    可以使用ThreadLocal存储一些参数,一边线程中多个方法使用,用来替代方法传参的做法

    实现原理,jvm维护了一个map<Thread ,T> 每个线程去Map里面去,

    看代码案例:

    /** 线程封闭示例 */
    public class Demo7 {
        /** threadLocal变量,每个线程都有一个副本,互不干扰 */
        public static ThreadLocal<String> value = new ThreadLocal<>();
    
        /**
         * threadlocal测试
         * 
         * @throws Exception
         */
        public void threadLocalTest() throws Exception {
    
            // threadlocal线程封闭示例
            value.set("这是主线程设置的123"); // 主线程设置值
            String v = value.get();
            System.out.println("线程1执行之前,主线程取到的值:" + v);
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    String v = value.get();
                    System.out.println("线程1取到的值:" + v);
                    // 设置 threadLocal
                    value.set("这是线程1设置的456");
    
                    v = value.get();
                    System.out.println("重新设置之后,线程1取到的值:" + v);
                    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();
        }
    }

    栈封闭:  局部变量 

    局部变量就是线程封闭中,其他线程无法访问

  • 相关阅读:
    打sql server pack4后打开网站报错的解决办法
    北京大学的三角形文章
    一次SQL Server 2000修复实践的说明
    今天重看了几集《将爱情进行到底》
    MakeFile的写法
    [经验杂谈]与大虾对话:领悟设计模式zz
    论函数调用约定(zz)
    用标准模板库STL实现文件比较(zz)
    C++中的虚函数(virtual function)
    为学院科研办做的个小应用管理程序
  • 原文地址:https://www.cnblogs.com/cxyxiaobao/p/12386293.html
Copyright © 2011-2022 走看看