zoukankan      html  css  js  c++  java
  • ThreadLocal

    
    ThreadLocal提供了线程内存储变量的能力,这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。通过get和set方法就可以得到当前线程对应的值。
    
    ThreadLocal和Synchronized都是为了解决多线程中相同变量的访问冲突问题,
    不同的点是Synchronized是通过线程等待,牺牲时间来解决访问冲突
    ThreadLocal是通过每个线程单独一份存储空间,牺牲空间来解决冲突,
    
    相比于Synchronized,ThreadLocal具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问到想要的值。
    正因为ThreadLocal的线程隔离特性,使他的应用场景相对来说更为特殊一些。当某些数据是以线程为作用域并且不同线程具有不同的数据副本的时候,就可以考虑采用ThreadLocal。
    
    
    ThreadLocal多并发测试
    
    //定义一个全局变量
    public ThreadLocal threads = new ThreadLocal(){
      @Override
        protected ThreadTest initialValue() {
            return new ThreadTest();
        }
    };
    public ThreadLocal b = new ThreadLocal(){
        @Override
        protected String initialValue() {
            return new String();
        }
    };
    
    @Override
    public ThreadTest setThreadTest(String name,int n) {
        ThreadTest thread = new ThreadTest();
        thread.setName(name);
        b.set(name);
        thread.setPwd(b.get());
        threads.set(thread);
        setThread2(name,n);
        return thread;
    }
    
    
    public void setThread2(String name,int n){
        ThreadTest thread = threads.get();
        if(n%2==0){
            b.set(name + "---2的倍数---" + n);
        }else{
            b.set(name + "---不是2的倍数---" + n);
        }
        thread.setPwd(b.get());
        //数据库添加操作
        baseTransaction.save(thread);
        b.remove();
        threads.remove();
    }
    
  • 相关阅读:
    CCF-CSP-201803-3 URL映射
    CCF-CSP-201803-2 碰撞的小球
    CCF-CSP-201803-1 跳一跳
    SSH协议基础学习
    关于Kali-linux2019.4系统安装后乱码问题
    git版本控制工具学习--修改分支名字
    Git版本控制工具操作学习系列-克隆项目
    python函数int()转型报错
    Centos关机与重启命令收集学习
    Git commit 提交规范 & 规范校验
  • 原文地址:https://www.cnblogs.com/yu-du-chen/p/12109062.html
Copyright © 2011-2022 走看看