zoukankan      html  css  js  c++  java
  • ThreadLocal

    如果线程都调用同一个类的数据,会导致数据错误,ThreadLocal用来提供线程内部的共享变量,在多线程环境下,可以保证各个线程之间的变量互相隔离、相互独立。

    如果有一个类的某个变量会被不同的进程调用,就必须将这个变量设置成ThreadLocal类型 

    ThreadLocal一般会加泛型,实例化对象一般有两种方:

    第一种方式变量的初始值为null,第二种方式可以给设置的变量赋初始值

     static ThreadLocal<Integer> variable = new ThreadLocal<Integer>();
            static ThreadLocal<Integer> variable = new ThreadLocal<Integer>(){
            @Override
            protected Integer initialValue() {
                return 1;
            }
        };

    常用的方法有四个:

      T=initialValue()  返回此线程局部变量的当前线程的“初始值”。一般不调用set方法第一次调用get的方法的时候回自动调用活得初始值,二般是调用remove以后第一次调用get的时候。

      T=get()    返回当前线程的此线程局部变量副本中的值  

      void=set() 将此线程局部变量设置为指定值

      void=remove()  删除此线程局部变量的当前线程值。

    public class TortoiseRun extends Thread {
    //    static ThreadLocal<Integer> step = new ThreadLocal<Integer>();
        static ThreadLocal<Integer> step = new ThreadLocal<Integer>(){
        @Override
            protected Integer initialValue() {
            return 1;
            }
        };
        public TortoiseRun(){};
        public TortoiseRun(String name){
            super(name);
        };
        @Override
        public void run(){
            for (int i = 1; i <10; i++) {
                try {
                    Thread.currentThread().sleep(1000);
                    step.set(i);
                    System.out.println(Thread.currentThread().getName()+"走了"+step.get());
    
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
    
            }
        }
    
    }
    public class TestMain {
        public static void main(String[] args) {
            TortoiseRun tortoiserun1=new TortoiseRun("乌龟1");
            TortoiseRun tortoiserun2=new TortoiseRun("乌龟2");
            tortoiserun1.start();
            try {
                Thread.currentThread().sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
            tortoiserun2.start();
    
        }
    }
  • 相关阅读:
    关键词提取算法TextRank
    我的博文目录整理
    Windows Azure一些小技巧集合
    js数组和树互转
    this.props.form.validateFields回调不执行问题
    d3的4.x与3.x版本的区别
    d3提示框,虚线,选择区域
    d3布局
    d3文件导入和导出
    d3交互
  • 原文地址:https://www.cnblogs.com/ysmdbk/p/11237444.html
Copyright © 2011-2022 走看看