ThreadLocal实现线程范围的共享变量
2013-02-05 13:36
507 查看
ThreadLocal的作用和目的:用于实现线程内的数据共享,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据。
一个ThreadLocal代表一个变量,故其中只能放一个数据。
例:
若要存放多个数据:
一个ThreadLocal代表一个变量,故其中只能放一个数据。
例:
public class ThreadLocalTest { private static ThreadLocal<Integer> x = new ThreadLocal<Integer>(); public static void main(String[] args) { for(int i=0; i<2; i++){ new Thread(new Runnable(){ @Override public void run() { int data = new Random().nextInt(); System.out.println(Thread.currentThread().getName()+" put data:"+data); x.set(data); new A().get(); new B().get(); } }).start(); } } static class A{ public void get(){ int data = x.get(); System.out.println("A from "+Thread.currentThread().getName()+" get data:"+data); } } static class B{ public void get(){ int data = x.get(); System.out.println("B from "+Thread.currentThread().getName()+" get data:"+data); } } }
若要存放多个数据:
public class ThreadLocalTest02 { public static void main(String[] args) { for(int i=0; i<2; i++){ new Thread(new Runnable(){ @Override public void run() { int data = new Random().nextInt(); System.out.println(Thread.currentThread().getName()+" put data: "+data); MyThreadData.getThreadInstance().setName("name: "+data); MyThreadData.getThreadInstance().setAge(data); new A().get(); new B().get(); } }).start(); } } static class A{ public void get(){ MyThreadData myData = MyThreadData.getThreadInstance(); System.out.println("A from "+Thread.currentThread().getName()+" get data: "+myData.getName()+","+myData.getAge()); } } static class B{ public void get(){ MyThreadData myData = MyThreadData.getThreadInstance(); System.out.println("B from "+Thread.currentThread().getName()+" get data: "+myData.getName()+","+myData.getAge()); } } } class MyThreadData{ private MyThreadData() { } private static ThreadLocal<MyThreadData> map = new ThreadLocal<MyThreadData>(); public static MyThreadData getThreadInstance(){ MyThreadData instance = map.get(); if(instance==null){ instance = new MyThreadData(); map.set(instance); } return instance; } 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; } }
相关文章推荐
- 并发库应用之一 & ThreadLocal实现线程范围的共享变量
- ThreadLocal实现线程范围的共享变量
- 黑马程序员--javaSE--ThreadLocal实现线程范围的共享变量
- ThreadLocal实现线程范围的共享变量-笔记整理4
- ThreadLocal实现线程范围内共享变量
- ThreadLocal实现线程范围的共享变量
- Java线程总结(四):ThreadLocal实现线程范围的共享变量
- 使用JDK提供的ThreadLocal实现线程范围的共享变量(类似于Map<Thread,Variable>)
- Thread学习(八) ThreadLocal实现线程范围内的共享变量
- ThreadLocal实现线程范围的共享变量
- ThreadLocal实现线程范围的共享变量
- 多线程篇四:ThreadLocal实现线程范围内变量共享
- ThreadLocal实现线程范围的共享变量
- 【线程高新】——【ThreadLocal实现线程范围的共享变量】
- ThreadLocal实现线程范围的共享变量
- ThreadLocal实现线程范围的共享变量
- ThreadLocal实现线程范围的共享变量 代码示例
- ThreadLocal实现线程范围内共享变量和对象
- ThreadLocal 线程范围内的共享变量
- 五:java中线程范围内共享变量--Map实现