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

    修改一下:

     没写完明天写

  • 相关阅读:
    发现可以用undef
    再改WUIBUTTON
    使用WUI点滴(一)
    关于IE里超链接失效的解决方案
    WUIButton的BUG
    GDI+ 你使用了吗?
    初次使用WUI
    判断键是否按下
    电梯坏了怎么办?
    在sdk中如何加入web浏览器的两种方法(转贴)
  • 原文地址:https://www.cnblogs.com/qzhc/p/11961859.html
Copyright © 2020-2023  润新知