zoukankan      html  css  js  c++  java
  • 线程变量(ThreadLocal)的使用和测试

    ThreadLocal可以定义线程范围的变量,也可以称之为线程局部变量。与一般的变量的区别在于,生命周期是在线程范围内的。

    也就是说某个类的某个对象(为清晰描述,以下称A对象)里面有个ThreadLocal变量,

    那么每开一个线程,在线程中第一次调用A对象,都会先初始化该变量的值,并且不会对其他线程中的A对象产生影响。测试如下:

    public interface IBase {
        public static final ThreadLocal<Boolean> onlyCallLocalFlg = new ThreadLocal<Boolean>(){  
            protected Boolean initialValue(){  
                return false;  
            }  
        };
    }
    public class BaseImpl implements IBase {
    
    }

    真正的测试类:

    public class TestClassName {
    
        public static void main(String[] args) {
            BaseImpl baseImpl = new BaseImpl();
            final IBase base = (IBase)baseImpl;
            base.onlyCallLocalFlg.get();
            //System.out.println(base.onlyCallLocalFlg.get());
            System.out.println(base.getClass().getInterfaces()[0].getSimpleName());
            System.out.println(base.getClass().getSimpleName());
            
            new Thread() {
                public void run() {
                    base.onlyCallLocalFlg.set(true);
                }
            }.start();
            
            base.onlyCallLocalFlg.set(true);
            
            new Thread() {
                public void run() {
                    System.out.println("线程中:"+base.onlyCallLocalFlg.get());
                }
            }.start();
            System.out.println("主线程中:"+base.onlyCallLocalFlg.get());
        }
    
    }

    打印结果:

    IBase
    BaseImpl
    主线程中:true
    线程中:false

    可以得出结论,不论在第一个创建的线程还是在主线程中修改onlyCallLocalFlg 的值,都不会对第二个线程产生影响。

    小贴士:

    static变量是的生命周期与类的使用周期相同,即只要类存在,那么static变量也就存在。
    那么一个 static 的 ThreadLocal会是什么样的呢?

    static的ThreadLocal变量是一个与线程相关的静态变量,即一个线程内,static变量是被各个实例共同引用的,但是不同线程内,static变量是隔开的。

  • 相关阅读:
    linux 11201(11203) ASM RAC 安装
    [学习笔记]多项式对数函数
    linux 10201 ASM RAC 安装+升级到10205
    tar
    [学习笔记]多项式开根
    gzip
    小朋友和二叉树
    zip
    bzoj5016 一个简单的询问
    unzip
  • 原文地址:https://www.cnblogs.com/flying607/p/5460937.html
Copyright © 2011-2022 走看看