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 克隆一份或者说生成一个副本,各个线程自己用自己的。
修改一下:
没写完明天写