码迷,mamicode.com
首页 > 编程语言 > 详细

单线程范围内的数据共享_ThreadLocal

时间:2015-12-13 09:49:17      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

单线程范围内数据共享使用ThreadLocal

 
/**   
 * @Description    TODO
 * @author         zhanghw@chinatelecom.cn
 * @since          2015年12月12日
 * @version        V1.0
 */

public class DataShare {
    /**
     * ThreadLocal:保存和当前线程相关的变量数据
     * 线程范围内的数据共享 ThreadLocal
     * 优雅的设计方式,Person
     * 每一个线程使用完毕要清空ThreadLocal保存的当前变量
     * 
     * 如何判断一个线程结果:监听器,回掉函数
     * 当一个线程结束的时候,主动调用回掉函数表示函数结束。 
     * 怎么得到线程结束的通知 :ThreadDeathEvent
     * 在虚拟机结束的时候发邮件
     * 
     * ThreadDeatRequest
     * com.sun.jdi.request //sun公司给开发虚拟机用的,不对普通开发人员开放
     * 
     */
    
 
    public static void main(String[] args) {
        
        new Thread(new Runnable() {
            @Override
            public void run() {
                Person.getInstance().setName("zhangsan");
                Person.getInstance().setAge(25);
                new A().getName();
                new B().getName();
                
            }
        }).start();
        
        new Thread(new Runnable() {
            @Override
            public void run() {
                Person.getInstance().setName("lisi");
                Person.getInstance().setAge(28);
                new A().getName();
                new B().getName();
                
            }
        }).start();
    }
    

}

class A{
    public void getName(){
        System.out.println("A "+Thread.currentThread().getName()+":"+Person.getInstance().getName());
    }
}
class B {
    public void getName(){
        System.out.println("B "+Thread.currentThread().getName()+":"+Person.getInstance().getName());
    }
}

Person类:

package com.ctyun.thread.datashare;

/**
 * @Description TODO
 * @author zhanghw@chinatelecom.cn
 * @since 2015年12月12日
 * @version V1.0
 */

public class Person {
    // 优雅的设计方式,将ThreadLocal封装到bean内部,隐藏变化
    private static ThreadLocal<Person> instance = new ThreadLocal<Person>();

    private Person() {
    }

    public static Person getInstance() {
        Person p = instance.get();
        if (p == null) {
            p = new Person();
            instance.set(p);
        }

        return p;
    }

    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;
    }

}

ThreaLocal的remove方法,可以移除当前线程绑定在ThreadLocal上的所有变量数据。

单线程范围内的数据共享_ThreadLocal

标签:

原文地址:http://www.cnblogs.com/zhangshiwen/p/5042315.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!