java中的ThreadLocal详解及示例代码

Posted 零

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的ThreadLocal详解及示例代码相关的知识,希望对你有一定的参考价值。

ThreadLocal

根据名字我们可以知道这是一个线程本地变量,每一个线程都回copy一个副本,可以为创造对象减少不必要的开销(单例),但是不能保证线程安全(每个线程的结果可能是不一样的)

ThreadLocal对比锁机制:

  • 锁机制是以时间换空间,让多个线程依次访问一个资源
  • ThreadLocal是以空间换时间,每个线程拥有资源的一个副本,不会相互影响

ThreadLocal类常用方法:

  • get:获得线程局部变量中的值
  • set:设置值
  • remove:删除值
  • initialValue:给值进行初始化

示例代码

public class UseThreadLocal 
    //定义普通的变量
    private static int num1 = 0;
    //定义线程局部变量
    private static ThreadLocal<Integer> local = new ThreadLocal<Integer>() 
        //重写initialValue方法,如果不重写初始值为null
        protected Integer initialValue() 
            //返回初始值
            return 0;
        
    ;

    public static void main(String[] args) 
        //创建十个线程
        for (int i = 0; i < 10; i++) 
            new Thread(new Runnable() 
                @Override
                public void run() 
                    num1++;//分别修改普通变量
                    System.out.println("普通变量=" + num1);
                    //修改线程局部变量的值
                    local.set(local.get() + 1);
                    System.out.println("线程局部变量=" + local.get());
                
            ).start();
        
    

以上是关于java中的ThreadLocal详解及示例代码的主要内容,如果未能解决你的问题,请参考以下文章

Java中的ThreadLocal详解

ThreadLocal原理及使用示例

JAVA concurrency 之ThreadLocal源码详解,80%人不会

详解ThreadLocal原理及内存泄漏

java之ThreadLocal详解

ThreadLocal详解