ThreadLocal讲解

ThreadLocal的作用是什么?

如果定义一个变量 x=1,如果三个线程同时访问x ,它们公用一个变量,用的是同一个x;

但如果把这个变量放到ThreadLocal里面,线程1去用x,他就会把x复制一份,给线程1用,

线程1如果删掉或修改x,之前的x不动,修改或者删除的只是副本里的x;同样,线程2或3去拿x,也是拿一个副本,删掉或

修改都不影响ThreadLocal类的x。

大家看下面一段代码:

package com.henu;

import java.util.ArrayList;
import java.util.List;

public class threadlocal {
    public static void main(String[] args) {
        MyThread mt = new MyThread();
        new Thread(mt).start();
        new Thread(mt).start();
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        List list = mt.getList();
        System.out.println(list.size());
    }
}
class MyThread implements Runnable{
    private List<String> list = new ArrayList<String>();

    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    @Override
    public void run() {
        list.add("abc");

    }
}

打印的结果是“ 2 ”;现在是一个主线程,两个子线程,三个线程里都用到了list,

而且是同一个。

我们现在像这样,我们在类中定义一个list,其他线程再去拿时,拿的是自己的,也就是

把类里的list 克隆一份或者说生成一个副本,各个线程自己用自己的。

修改一下:

 没写完明天写

原文地址:https://www.cnblogs.com/qzhc/p/11961859.html