thread_threadLocal(多线程共享数据)

来源:互联网 发布:如何用python写爬虫 编辑:程序博客网 时间:2024/05/17 07:14

package com.gzhs.zsd.thread;

import java.util.Random;

/*
* ThreadLoacl应用
* @author 谢泽鹏
* @version 1.0
*/
public class Thread_ThreadLoacl {

//线程数据private static int data = 0;private static ThreadLocal<Integer> shareData = new ThreadLocal<Integer>();//private static ThreadLocal<MyThreadScopeData> myShareDatas = new ThreadLocal<MyThreadScopeData>();public static void main(String[] args) {    //创建两个线程    for(int i = 0; i < 2; i++){        new Thread(new Runnable(){            @Override            public void run() {                data = new Random().nextInt();                System.out.println(Thread.currentThread().getName() + " has put data :" + data);                //存放线程数据                //shareData.set(data);                MyThreadScopeData.getThreadInstance().setAge(data);                MyThreadScopeData.getThreadInstance().setName("" + data);                //A模块拿数据                new A().get();                //B模块拿数据                new B().get();            }        }).start();    }}//A模块static class A{    public void get(){        //获取数据

// int data = MyThreadScopeData.getThreadInstance().getAge();
// System.out.println(“B from ” + Thread.currentThread().getName() + ” get data :” + data);
MyThreadScopeData myThreadScopeData = MyThreadScopeData.getThreadInstance();
int age = myThreadScopeData.getAge();
String name = myThreadScopeData.getName();
System.out.println(“A from ” + Thread.currentThread().getName() + ” get age :” + age + ” get name ” + name);
}
}

//B模块static class B{    public void get(){        //获取数据

// int data = MyThreadScopeData.getThreadInstance().getAge();
// System.out.println(“B from ” + Thread.currentThread().getName() + ” get data :” + data);
MyThreadScopeData myThreadScopeData = MyThreadScopeData.getThreadInstance();
int age = myThreadScopeData.getAge();
String name = myThreadScopeData.getName();
System.out.println(“A from ” + Thread.currentThread().getName() + ” get age :” + age + ” get name ” + name);
}
}

}

//数据存储类
class MyThreadScopeData{
private MyThreadScopeData(){}
public static /synchronized/ MyThreadScopeData getThreadInstance(){
MyThreadScopeData instance = map.get();
if(instance == null){
instance = new MyThreadScopeData();
map.set(instance);
}
return instance;
}
//private static MyThreadScopeData instance = null;//new MyThreadScopeData();
private static ThreadLocal map = new ThreadLocal();

private String name;private int age;public String getName() {    return name;}public void setName(String name) {    this.name = name;}public int getAge() {    return age;}public void setAge(int age) {    this.age = age;}

}

0 0