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 克隆一份或者说生成一个副本,各个线程自己用自己的。

    修改一下:

     没写完明天写

  • 相关阅读:
    mui-手动触发下拉刷新
    Viewer.js 是一款强大的 jQuery 图像浏览插件。
    svn报错Can‘t install ‘*‘ from pristine store, because no checksum is recorded for this file
    KendoUI系列:ComboBox
    KendoUI系列:DropDownList
    简单使用AutoMapper实现DTO转换
    C# List.ForEach 方法
    C# LINQ需求实现演化
    C# yeild使用
    C#委托(delegate)
  • 原文地址:https://www.cnblogs.com/qzhc/p/11961859.html
Copyright © 2011-2022 走看看