ThreadLocal
Posted sqmax
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThreadLocal相关的知识,希望对你有一定的参考价值。
ThreadLocal的基本含义
ThreadLocal代表线程局部变量,就是为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其它线程副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量一样。
下面是它的用法示例:
class Account {
private ThreadLocal<String> name = new ThreadLocal<>();
public Account(String string) {
this.name.set(string);
}
public String getName() {
return name.get();
}
public void setName(String string) {
name.set(string);
}
}
class MyTest extends Thread {
private Account account;
public MyTest(Account account, String name) {
super(name);
this.account = account;
}
public void run() {
for (int i=0;i<5;i++) {
if (i == 2) {
account.setName(getName());
}
System.out.println(account.getName() + "账户的i的值:" + i);
}
}
}
public class ThreadLocalTest {
public static void main(String[] args) {
Account at = new Account("线程Main");
//main线程中thradlocal中的变量值
System.out.println(at.getName());
new MyTest(at, "线程甲").start();
new MyTest(at, "线程乙").start();
}
}
运行结果如下:
线程Main
null账户的i的值:0
null账户的i的值:1
线程甲账户的i的值:2
线程甲账户的i的值:3
线程甲账户的i的值:4
null账户的i的值:0
null账户的i的值:1
线程乙账户的i的值:2
线程乙账户的i的值:3
线程乙账户的i的值:4
上面程序中变量的关系如下:
ThreadLocal源码分析
.....
以上是关于ThreadLocal的主要内容,如果未能解决你的问题,请参考以下文章