zoukankan      html  css  js  c++  java
  • 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 克隆一份或者说生成一个副本,各个线程自己用自己的。

    修改一下:

     没写完明天写

  • 相关阅读:
    jackson自动将东八区时间转成标准时间
    开发项目和所用时间 感想
    自我介绍
    后缀数组模板
    lucas模板
    后缀数组da3模板
    cf#366....
    第1月2周1天
    第1月2周2天
    第1月1周1天
  • 原文地址:https://www.cnblogs.com/qzhc/p/11961859.html
Copyright © 2011-2022 走看看