优雅的设计单线程范围内的数据共享(ThreadLocal)
单线程范围内数据共享使用ThreadLocal
/**
* @Description TODO
* @author
* @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 S
* @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)的更多相关文章
- 如何优雅的设计React组件
如何优雅的设计 React 组件 如今的 web 前端已被 React.Vue 和 Angular 三分天下,一统江山十几年的 jQuery 显然已经很难满足现在的开发模式.那么,为什么大家会觉得 j ...
- Golang Web入门(3):如何优雅的设计中间件
摘要 在上一篇文章中,我们已经可以实现一个性能较高,且支持RESTful风格的路由了.但是,在Web应用的开发中,我们还需要一些可以被扩展的功能. 因此,在设计框架的过程中,应该留出可以扩展的空间,比 ...
- java 多线程 day05 线程范围内的数据共享
import java.util.HashMap;import java.util.Map;import java.util.Random;/** * Created by chengtao on 1 ...
- Spring Boot入门系列(二十一)如何优雅的设计 Restful API 接口版本号,实现 API 版本控制!
前面介绍了Spring Boot 如何快速实现Restful api 接口,并以人员信息为例,设计了一套操作人员信息的接口.不清楚的可以看之前的文章:https://www.cnblogs.com/z ...
- Java多线程——线程范围内共享变量和ThreadLocal
多个线程访问共享对象和数据的方式 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. package java_ ...
- 【漫谈数据仓库】 如何优雅地设计数据分层 ODS DW DM层级
转载http://bigdata.51cto.com/art/201710/554810.htm 一.文章主题 本文主要讲解数据仓库的一个重要环节:如何设计数据分层!其它关于数据仓库的内容可参考之前的 ...
- 线程系列5--java中的ThreadLocal类实现线程范围内的数据共享(二)
ThreadLocal类可以理解成一个类似与map集合使用,以当前线程当做key 来使用,将线程氛围内需要共享的数据当做value,形成键值对的形式使用.ThreadLocal和线程同步机制都是为了解 ...
- 如何优雅的设计 React 组件
作者:晓冬 本文原创,转载请注明作者及出处 如今的 Web 前端已被 React.Vue 和 Angular 三分天下,一统江山十几年的 jQuery 显然已经很难满足现在的开发模式.那么,为什么大家 ...
- 4、线程范围内的数据共享之ThreadLocal
/** * 线程范围类的数据共享 * 核心:ThreadLocal类 * 实际场景: * Hibernate的getCurrentSession方法,就是从线程范围内获取存在的session,如果不存 ...
随机推荐
- LINUX系统编程 由REDIS的持久化机制联想到的子进程退出的相关问题
19:22:01 2014-08-27 引言: 以前对wait waitpid 以及exit这几个函数只是大致上了解,但是看REDIS的AOF和RDB 2种持久化时 均要处理子进程运行完成退出和父进程 ...
- PAT (Basic Level) Practise:1022. D进制的A+B
[题目连接] 输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数. 输入格式: 输入在一行中依次给出3个整数A.B和D. 输出格式: ...
- web移动端input获得光标Fixed定位失效解决方案
移动端业务开发,iOS 下经常会有 fixed 元素和输入框(input 元素)同时存在的情况. 但是 fixed元素在有软键盘唤起的情况下,会出现许多莫名其妙的问题. 这篇文章里就提供一个简单的有输 ...
- mySql-通过group by分组
当我们想查询主表和子表的信息时,我们首先会通过主表的id和子表中的主表id关联 如现有主表:tbl_enquire_price(询价表)和子表:tbl_enquire_price_detail(询价详 ...
- uva674 Coin Change ——完全背包
link:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- CDH自己安装方式Hbase master备份方式
hbase-daemon.sh start master 启动改命令会默认产生Hmaster 进程,等待主机宕机,zookeepr 监控
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
因为同样的方法在java中没有问题,放到web工程中就出现了问题.网上查到的资料,说只要把mysql-connector-java-5.1.7-bin.jar放入tomcat中的lib文件夹就可以.很 ...
- 关于 MAXScript 获取全部文件
MAXScript 官方文档里关于获取文件夹下所有文件的方法 fn getFilesRecursive root pattern = ( dir_array = GetDirectories (roo ...
- Linux之Qt利用Sqlite静态编译库(转)
参考:http://www.linuxidc.com/Linux/2011-11/47465.htm sqlite3编译安装 ------------------------arm版--------- ...
- (转)Let’s make a DQN 系列
Let's make a DQN 系列 Let's make a DQN: Theory September 27, 2016DQN This article is part of series Le ...