之前给大家介绍过关于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入门知识可以帮你解答。
推荐阅读: