ThreadLocal类的特点是什么?ThreadLocal应用场景详解

KLQ 2020-06-29 16:06:31 java常见问答 3357

之前给大家介绍过关于threadlocal原理的相关内容,那么下面要给大家介绍的就是ThreadLocal类的特点以及ThreadLocal的应用场景,一起来了解一下吧!

1、ThreadLocal类的特点有哪些?

ThreadLocal为解决多线程程序的并发问题提供了一种新的思路,主要有以下几个特点:

(1)ThreadLocal的类声明:

ThreadLocal没有继承Thread,没有实现Runnable接口;

(2)ThreadLocal类为每一个线程都维护了自己独有的变量拷贝,每个线程都拥有了自己独立的一个变量,所以ThreadLocal重要作用并不在于多线程间的数据共享,而是数据的独立;

(3)因为,每个线程在访问这个变量的时候,读取和修改的都是自己独有的那一份变量拷贝,不会被其他线程访问,变量被彻底封闭在每个访问的线程当中,所以ThreadLocal保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏;

(4)ThreadLocal当中,定义了一个哈希表用来为每个线程都提供一个变量的副本;

2、ThreadLocal应用场景

例子

public class TestThreadLocal
{
    //线程本地存储变量
    private static final ThreadLocal < Integer > THREAD_LOCAL_NUM = new ThreadLocal < Integer > ()
    {
        @Override
        protected Integer initialValue()
        {
            return 0;
        }
    };
    public static void main(String[] args)
    {
        for (int i = 0; i < 3; i++)
        { //启动三个线程
            Thread t = new Thread()
            {
                @Override
                public void run()
                {
                    add10ByThreadLocal();
                }
            };
            t.start();
        }
    }
    /**
     * 线程本地存储变量加 5
     */
    private static void add10ByThreadLocal()
    {
        for (int i = 0; i < 5; i++)
        {
            Integer n = THREAD_LOCAL_NUM.get();
            n += 1;
            THREAD_LOCAL_NUM.set(n);
            System.out.println(Thread.currentThread()
                .getName() + " : ThreadLocal num=" + n);
        }
    }
}

结果

Thread - 0: ThreadLocal num = 1
Thread - 1: ThreadLocal num = 1
Thread - 0: ThreadLocal num = 2
Thread - 0: ThreadLocal num = 3
Thread - 1: ThreadLocal num = 2
Thread - 2: ThreadLocal num = 1
Thread - 0: ThreadLocal num = 4
Thread - 2: ThreadLocal num = 2
Thread - 1: ThreadLocal num = 3
Thread - 1: ThreadLocal num = 4
Thread - 2: ThreadLocal num = 3
Thread - 0: ThreadLocal num = 5
Thread - 2: ThreadLocal num = 4
Thread - 2: ThreadLocal num = 5
Thread - 1: ThreadLocal num = 5

启动了 3 个线程,每个线程最后都打印到 "ThreadLocal num=5",而不是num一直在累加直到值等于15。

对于ThreadLocal你还有什么想要了解的吗?或者是你还想了解更多和java方面相关的知识吗?更多的内容可以继续通过奇Q工具网来进行了解哦,更多java常见问题java入门知识可以帮你解答。

推荐阅读:

threadlocal应用场景使用方式介绍java

ThreadLocal原理是指什么?使用场景有哪些?