优雅的设计单线程范围内的数据共享(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,如果不存 ...
随机推荐
- HTMl5-canvas 入门级复习
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Unity3D 使用C#指针unsafe
Unsafe code requires the `unsafe' command line option to be specified 在Unity开发中,如果涉及到指针的使用,需要自己定义预处理 ...
- 常用的 SQL 函数
SQL 函数 聚合函数(针对数字列): AVG:求平均分 COINT: 计算个数 MAX: 求最大值 MIN: 求最小值 SUM: 求和 数学函数(): ABS: 绝对值 CEIL ...
- 无锁队列以及ABA问题
队列是我们非常常用的数据结构,用来提供数据的写入和读取功能,而且通常在不同线程之间作为数据通信的桥梁.不过在将无锁队列的算法之前,需要先了解一下CAS(compare and swap)的原理.由于多 ...
- Sprint第二个冲刺(第十三天)
一.Sprint 计划会议: sprint2计划的功能还没有全部完成,还在实现剩余的两个功能模块,目前工作进展还比较顺利,争取下一个sprint完成剩余的所有目标. 以下是真机测试下的拍照和系统相册取 ...
- C++概念整理
/* 面向对象: 多态, 继承 封装 */ #include <stdio.h> #include <stdlib.h> //一旦有了纯虚函数,该对象就不能实例化了. #def ...
- js实现cookie记住密码
近来做记住密码时,用js的实现方式做了一下. login.jsp页面代码 <%@ page language="java" import="java.util.*& ...
- opencv--图像轮廓检测
//图像的轮廓检测上 //By MoreWindows (http://blog.csdn.net/MoreWindows) #include <opencv2/opencv.hpp> u ...
- python windows终端窗口下输出编码错误
windows简体中文版下终端默认字符集gbk,执行chcp 65001临时修改字符集. 修改默认字符集:注册表HKEY_CURRENT_USER\Console项中CodePage值修改为65001
- Android项目——读取手机联系人信息
加入读取联系人信息的权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> cont ...