优雅的设计单线程范围内的数据共享(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,如果不存 ...
随机推荐
- Mybatis开篇以及配置教程
MyBatis来源~: MyBatis本是apache的一个开源的项目,原来称为iBatis,2010年这个项目由apache softwarefoundation迁移到了google code,并改 ...
- 实际项目中积累的一些关于事件的简单应用JS代码段(能力有限,不喜轻喷,23333)
1:鼠标移入移出显示另一张图片 var yuanquan_1 = document.getElementById("yuanquan_1" ); yuanquan_1. onmo ...
- addslashes() 函数和stripslashes()函数
addslashes() 函数 定义和用法 addslashes() 函数在指定的预定义字符前添加反斜杠. 这些预定义字符是: 单引号 (') 双引号 (") 反斜杠 (\) NULL 语法 ...
- Collection(数组、字典、集合)
Collection -NSArray和NSMutableArray +array:创建一个空数组 +arrayWithArray:从另一个数组创建新的数组 ...
- bigworld源码分析(4)——BaseAppMgr分析
BaseAppMgr是用来管理BaseApp的,在整个bigworld中只有一个.本篇就BaseAppMgr的一些核心功能进行分析: (1) BaseAppMgr是如何通知BaseApp创建Entit ...
- PHP7在linux下的安装步骤
安装mcrypt: yum install -y php-mcrypt libmcrypt libmcrypt-devel 升级bison: cd /var/soft/ wget http://ftp ...
- C#基础知识系列十(集合)
前言 本节主要是来了解学习集合,以方便在程序编写时,什么地方该选用什么集合,让程序更健壮的运行起来.在学习了解集合之前,首先需要了解一些数据结构方面的知识.下面我们就先简单的来看一下数据结构. 数据结 ...
- pycharm安装
license server http://idea.lanyus.com
- Oracle学习系列5
Oracle学习系列5 ************************************************************************************ ,掌握 ...
- 【原创】Scrum模式也要根据自身特点微调,不能教条
手上的项目在用Scrum模式开发,运用的是禅道这个国产的平台,运作得还不错,具体如下: 1.整个开发团队有10个人,分为:新功能开发组和系统优化组,每组配备一个技术经理2.人员分在两个办公地点(同一城 ...