• 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();
    }
    
  • 相关阅读:
    vc++ generate random via random_device and uniform_int_distribution
    Windows OpenGL 图像对比度调节
    OpenGL ES 版本介绍
    Windows OpenGL 图像伽马线
    Windows OpenGL 图像反色
    OpenGL ES 简介
    Windows OpenGL ES 图像饱和度调节
    修改 Docker 数据根目录
    mysql分库备份与分表备份
    docker dockerfile 映射端口范围 批量映射端口
  • 原文地址:https://www.cnblogs.com/yu-du-chen/p/12109062.html
Copyright © 2020-2023  润新知