目录
2、新建外部类添加成员变量(这个是教程3中用到的,我比较常用)
一、引言
多线程数据隔离与数据共享是个矛盾体,有些数据需要隔离,比如每个人的银行账户,有些需要共享比如买票的总火车票数量,这个问题导致了这篇文章的出现,抽象出了这两类问题。
二、数据隔离
多线程之间就是因为数据共享在多个线程才导致了线程不安全,这就要求线程间的数据需要隔离,从根本上解决了线程安全问题,比如我们每个人都有自己的银行账户,每次存钱行为一样,但是都存入了自己的银行账户而不是通用的银行账户。
这个问题ThreadLocal变量帮我们解决了这个问题,我们只需要创建该变量,在每个线程里面使用相当于它在每个线程里面都有一个相同名字的变量供我们使用。
public class TestThreadlocal {
static ThreadLocal<Student> threadLocalst=new ThreadLocal<Student>();
public static void main(String [] args)
{
//System.out.print("asdf");
for (int i=0;i<10;i++)
{
new Thread(new Runnable() {
public void run() {
Student student=new Student();
student.setAge(new Random().nextInt() +"");
student.setName("xcy");
System.out.println(Thread.currentThread().getName()+ student.getName()+student.getAge());
threadLocalst.set(student);
new A().get();
new B().get();
}
}){}.start();
}
}
static class A{
public void get (){
Student st=threadLocalst.get();
System.out.println(Thread.currentThread().getName()+ st.getName()+st.getAge());
}
}
static class B{
public v