单线程范围内数据共享使用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)的更多相关文章

  1. 如何优雅的设计React组件

    如何优雅的设计 React 组件 如今的 web 前端已被 React.Vue 和 Angular 三分天下,一统江山十几年的 jQuery 显然已经很难满足现在的开发模式.那么,为什么大家会觉得 j ...

  2. Golang Web入门(3):如何优雅的设计中间件

    摘要 在上一篇文章中,我们已经可以实现一个性能较高,且支持RESTful风格的路由了.但是,在Web应用的开发中,我们还需要一些可以被扩展的功能. 因此,在设计框架的过程中,应该留出可以扩展的空间,比 ...

  3. java 多线程 day05 线程范围内的数据共享

    import java.util.HashMap;import java.util.Map;import java.util.Random;/** * Created by chengtao on 1 ...

  4. Spring Boot入门系列(二十一)如何优雅的设计 Restful API 接口版本号,实现 API 版本控制!

    前面介绍了Spring Boot 如何快速实现Restful api 接口,并以人员信息为例,设计了一套操作人员信息的接口.不清楚的可以看之前的文章:https://www.cnblogs.com/z ...

  5. Java多线程——线程范围内共享变量和ThreadLocal

    多个线程访问共享对象和数据的方式 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. package java_ ...

  6. 【漫谈数据仓库】 如何优雅地设计数据分层 ODS DW DM层级

    转载http://bigdata.51cto.com/art/201710/554810.htm 一.文章主题 本文主要讲解数据仓库的一个重要环节:如何设计数据分层!其它关于数据仓库的内容可参考之前的 ...

  7. 线程系列5--java中的ThreadLocal类实现线程范围内的数据共享(二)

    ThreadLocal类可以理解成一个类似与map集合使用,以当前线程当做key 来使用,将线程氛围内需要共享的数据当做value,形成键值对的形式使用.ThreadLocal和线程同步机制都是为了解 ...

  8. 如何优雅的设计 React 组件

    作者:晓冬 本文原创,转载请注明作者及出处 如今的 Web 前端已被 React.Vue 和 Angular 三分天下,一统江山十几年的 jQuery 显然已经很难满足现在的开发模式.那么,为什么大家 ...

  9. 4、线程范围内的数据共享之ThreadLocal

    /** * 线程范围类的数据共享 * 核心:ThreadLocal类 * 实际场景: * Hibernate的getCurrentSession方法,就是从线程范围内获取存在的session,如果不存 ...

随机推荐

  1. Mybatis-动态 SQL

    MyBatis 的强大特性之一便是它的动态 SQL. 如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省 ...

  2. matlab使用

    1.nargin 在matlab中定义一个函数时, 在函数体内部, nargin是用来判断输入变量个数的函数. 2.assert “断言”,“坚持自己的主张”.判断函数. http://www.cnb ...

  3. Android TextView图文混合编排

    Android TextView图文混合编排 实现技术细节不难,两个要点:1.html代码的混合编写.2,重写ImageGetter.例如:布局: <?xml version="1.0 ...

  4. 第十三周学习笔记(编辑器选错了重发了这一个 原博客的确周天晚上提交了orz)

    并发:逻辑控制流在时间上的重叠. 构造并发程序的方法: 进程 I/O多路复用 线程 基于进程的并发编程 假设我们有两个客户端和一个服务器,服务器正在监听一个监听表述符上的请求.现在假设服务器接受了客户 ...

  5. python数据结构与算法——图的广度优先和深度优先的算法

    根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 每次循环从队列弹出一个结点 将该节点的所有相连结点放入队列,并标记已被发现 通过队列,将迷宫路口所有的门打 ...

  6. 机器学习(一) 从一个R语言案例学线性回归

    写在前面的话 按照正常的顺序,本文应该先讲一些线性回归的基本概念,比如什么叫线性回归,线性回规的常用解法等.但既然本文名为<从一个R语言案例学会线性回归>,那就更重视如何使用R语言去解决线 ...

  7. 根据 url请求数据

    public static JSONObject getJsonFromUrl(String url){ CloseableHttpClient httpClient = HttpClients.cr ...

  8. 修改Apache的最大连接数

    Apache的最大连接数,默认为256个. 修改apache的最大连接数,方法如下: 一:先修改./apache/conf/httpd.conf文件. # vi httpd.conf 将“#Inclu ...

  9. JSBinding+SharpKit / JavaScript调试

    注意: 1 Firefox 的版本用41 2 我发现调试很难用的,现在我都用打印 步骤参考图:

  10. Javascript操作Cookie的脚本 — CookieHelper

    var HttpCookie = function(name, value, expires, path, domain) { if (name) this.Name = name; if (valu ...