优雅的设计单线程范围内的数据共享(ThreadLocal)
2015-12-13 09:26
363 查看
单线程范围内数据共享使用ThreadLocal
Person类(优雅的线程范围共享数据设计):
ThreaLocal的remove方法,可以移除当前线程绑定在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上的所有变量数据。
相关文章推荐
- IOS开发音频播放之System Sound services
- intro to Apache Log4j 2
- linux下安装Mysql
- 黑马程序员--正则表达式
- anadroid inputmanager详细分析
- Debug和Release的区别 http://blog.csdn.net/vbskj/article/details/6990544
- Codevs-1074 食物链
- 基于jQuery通过jQuery.form.js插件实现异步上传
- PC机与嵌入式设备通信协议设计原则
- 数据库的简单介绍
- device eth0 does not seem to be present,delaying initialization
- 网络营销【淘宝宝贝主图】设计思路太原郭文军解说
- printf函数的使用
- 线程池介绍与应用
- 基于rails的schedule网站开发(10):Rails 环境
- 北京Uber优步司机奖励政策(12月13日)
- SQL Server Database 维护计划创建一个完整的备份策略
- LeetCode(108) Convert Sorted Array to Binary Search Tree解题报告
- CodeForces 304A (暴力枚举间接判另一变量)
- ios中图像进行压缩方法汇总