线程范围内的共享数据(一)
2013-04-21 19:21
225 查看
线程范围内共享数据作用和目的:线程内的数据共享,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据。即不同的线程对应不同的数据。如下图:
每个线程调用全局ThreadLocal对象的set方法,将相当于往其内的map中增加一条记录,key分别是各自的线程,value是各自的set方法传进去的值。线程结束时可以调用ThreadLocal.clear()方法,这样做会更快地释放内存,不调用也可以,因为线程结束后也可以自动释放相关的ThreadLocal变量。
1-1 一个线程范围内的数据共享的例子。
运行结果:
从运行结果可以看出:线程范围内的共享数据,不同的线程对应不同的数据,而同一数据相对不同的线程应该是一致的,不能出现同一数据对不同的对象(线程,模块)是不同的数据。
比如在银行的账户中:一个模块往账户转入,一个转出,两个动作要不都做,要不都不做(保持数据的一致性),两个对象访问这个数据应该是一样的数据。
每个线程调用全局ThreadLocal对象的set方法,将相当于往其内的map中增加一条记录,key分别是各自的线程,value是各自的set方法传进去的值。线程结束时可以调用ThreadLocal.clear()方法,这样做会更快地释放内存,不调用也可以,因为线程结束后也可以自动释放相关的ThreadLocal变量。
1-1 一个线程范围内的数据共享的例子。
import java.util.Hashtable; import java.util.Map; import java.util.Random; /* * 每个线程拥有自己独立的数据 */ public class ThreadScopeShareData {//三个模块中的一个 private static int data=0; //实现各模块独立的效果 private static Map<Thread, Integer> threadData=new Hashtable<Thread,Integer>(); public static void main(String[] args) { for (int i = 0; i < 2; i++) {//两个线程 new Thread(new Runnable() {//线程调用A模块和B模块 @Override public void run() { int data=new Random().nextInt(); System.out.println(Thread.currentThread().getName() +"has put data :"+data);//放进数据 threadData.put(Thread.currentThread(), data);//放数据 new A().get(); new B().get(); } }){}.start(); } } static class A{//A模块 public void get(){//取数据方法 int data=threadData.get(Thread.currentThread());//取数据 System.out.println("A from "+Thread.currentThread().getName() +" get data :"+data); } } static class B{//B模块 public void get(){//取数据方法 int data=threadData.get(Thread.currentThread());//取数据 System.out.println("B from "+Thread.currentThread().getName() +" get data :"+data); } } }
运行结果:
从运行结果可以看出:线程范围内的共享数据,不同的线程对应不同的数据,而同一数据相对不同的线程应该是一致的,不能出现同一数据对不同的对象(线程,模块)是不同的数据。
比如在银行的账户中:一个模块往账户转入,一个转出,两个动作要不都做,要不都不做(保持数据的一致性),两个对象访问这个数据应该是一样的数据。
相关文章推荐
- 线程范围内数据共享
- 黑马程序员---java中如何实现线程范围内共享数据
- java多线程学习(三)---线程范围内数据共享
- 多线程之线程范围内的数据共享ThreadLocal
- java线程范围内的数据共享
- 【java并发】线程范围内共享数据
- 线程范围内的共享数据(二)
- ThreadLocal-------线程范围内的数据共享
- 张孝祥实现线程范围内数据共享(学习笔记)
- 多线程_线程范围内数据共享
- 多线程并发库高级应用 之 线程范围内共享数据
- 黑马程序员-线程范围内的数据共享之ThreadLocal
- ThreadLocal实现线程范围内的数据共享
- 线程范围内共享数据
- java多线程:5、线程范围内的数据共享_ThreadLocal
- 线程范围内共享数据
- Java线程与并发库高级应用-线程范围内共享数据ThreadLocal类
- Java基础——线程范围内的共享数据概念和作用
- 线程范围内的数据共享
- 《黑马程序员》线程范围内的数据共享