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();
    
        }
    }
  • 相关阅读:
    yii2增删改查及AR的理解
    yii2中关联查询
    yii2常用的migrate命令
    有线电视网
    选课
    没有上司的舞会
    [ZJOI2008]骑士
    【模板】树链剖分
    [ZJOI2008]树的统计
    [NOI2015]软件包管理器
  • 原文地址:https://www.cnblogs.com/ysmdbk/p/11237444.html
Copyright © 2011-2022 走看看