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

源代码系列02——ThreadLocal源码分析(基础篇)

java中的ThreadLocal详解及示例代码

ThreadLocal介绍

MyBatis基础:使用java提供的ThreadLocal类优化代码

Java 单线程代码ThreadLocal串值问题

ThreadLocal