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详解及示例代码的主要内容,如果未能解决你的问题,请参考以下文章