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变量是隔开的。

  • 相关阅读:
    POJ 3259 Wormholes【BellmanFord】
    POJ 2960 SNim【SG函数的应用】
    ZOJ 3578 Matrixdp水题
    HDU 2897 邂逅明下【bash博弈】
    BellmanFord 算法及其优化【转】
    【转】几个Java的网络爬虫
    thinkphp 反字符 去标签 自动加点 去换行 截取字符串 冰糖
    php 二维数组转 json文本 (jquery datagrid 数据格式) 冰糖
    PHP 汉字转拼音(首拼音,所有拼音) 冰糖
    设为首页与加入收藏 兼容firefox 冰糖
  • 原文地址:https://www.cnblogs.com/flying607/p/5460937.html
Copyright © 2011-2022 走看看