java 多线程库_Java多线程设计模式(7)线程独有储藏库模式
一 Thread-Specific Storage Pattern
Thread-Specific Storage Pattern指的就是线程独有的储藏库,针对每个线程提供内存空间的意义。这种模式只有一个入口,但是内部会对每个线程提供特有的存储空间。
Thread-Specific Storage Pattern的所有参与者:
1,Client参与者,提出具体工作的,将该具体工作委托给TSObjectProxy参与者。
2,TSObjectProxy参与者,这个主要是接受工作请求的,它会处理多个Client的工作,它一般都包括了TSObjectCollection。一般都是先使用TSObjectCollection参与者,取得Client参与者所对应的TSObject参与者,并将Client具体的工作委托给TSObject参与者。
3,TSObjectCollection参与者,这个主要就是线程独有对象的集合,它利用线程键值对来存储着执行Client参与者线程所对应的TSObject参与者。一般都是利用ThreadLocal来实现。
4,TSObject参与者,线程独有的对象,存放着线程特有的信息,尽管会为多个线程使用,但是不需要利用synchronized来进行互斥操作。
TSObject参与者与TSObjectProxy参与者具有相同的接口。
具体的模式如下图所示。虽然多个不同的ClientThread来请求同一个对象Log即TSObjectProxy参与者,但是Log会为每个请求线程利用ThreadLocal来分配独立的TSLog对象。所有线程所共享的是TSObjectProxy参与者。
关于ThreadLocal小讲:
每一个线程都拥有自己独立的存储空间,也就是方法局部变量的堆栈,在方法里分配的局部变量都是线程所独有的,但是这些变量一退出方法就会消失了。ThreadLocal则是与方法调用无关,它为线程分配特有空间。
ThreadLocal实例如一个保管箱间,它通过线程键值对来存储与线程特定的信息。每个线程的保管箱,都放置在ThreadLocal中。
ThreadLocal该类提供了线程局部变量。ThreadLocal的局部变量在被多个线程使用时候,每个线程只能拿到该变量的一个副本。
在ThreadLocal类型的变量内部有个ThreadLocalMap,它提供了一个注册表来注册与当前线程相关的信息,ThreadLocal类型的变量对外部表现是一个,但是内部确实管理着一群对象的集合。
在利用get与set的时候,都会在两个方法体中首先获取Thread t = Thread.currentThread();,然后在该线程的内部进行操作。不用担心其他线程对于该线程的破坏访问。在使用两个方法的时候务必要分清是属于那个线程中的操作。
在这个模式中,客户端线程所共享的是TSObjectProxy参与者,但是实际的工作则是在TSObject参与者分配给相应的线程后才进行的,就是利用TSObjectProxy参与者来分配不被共享的TSObject参与者。对于TSObject完全不用做任何的互斥synchronized操作。
代码示例:
仅仅列出TSObjectProxy的架构模式
Log代表了TSObjectProxy参与者,供多个线程进行访问,最后将具体的操作委托给TSObject
package whut.specificstorage;
//负责产生保管箱间的类
public class Log {
//首先利用static final修饰
//保证了所有访问该类的线程都只使用一个唯一的且不变的保管箱间。
private static final ThreadLocal tsLogCollections=new ThreadLocal();
//不用使用synchronized,因为在使用get和set时候,会字段判别当前所属的线程
//取得当前线程特有的Log
private static TSLog getTSLog()
{
TSLog tsLog=(TSLog)tsLogCollections.get();
//如果线程是第一次调用,就建立新文件夹以及注册log
if(tsLog==null)
{
tsLog=new TSLog(Thread.currentThread().getName()+"-log.txt");
tsLogCollections.set(tsLog);
}
return tsLog;
}
//加入一条LOG
public static void println(String s)
{
getTSLog().println(s);
}
//关闭LOG
public static void close()
{
getTSLog().close();
}
}
该Log类具有TSobject相同的方法,客户端线程每次请求该类,进而为请求的线程分配属于该线程的TSObject对象,每次的工作都是最终委托给TSObject来真正的执行。TSObjectProxy和TSObject类的方法与字段不需要进行任何的synchronized处理。
java 多线程库_Java多线程设计模式(7)线程独有储藏库模式相关推荐
- java 多线程 进程_Java多线程1:进程与线程概述
进程和线程 谈到多线程,就得先讲进程和线程的概念. 进程 进程可以理解为受操作系统管理的基本运行单元.360浏览器是一个进程.WPS也是一个进程,正在操作系统中运行的".exe"都 ...
- java多线程编程_Java多线程编程实战指南+设计模式篇.pdf
Java多线程编程实战指南+设计模式篇.pdf 对Java架构技术感兴趣的工程师朋友们可以关注我,转发此文后私信我"Java"获取更多Java编程PDF资料(附送视频精讲) 关注我 ...
- java的多线程机制_Java多线程开发(一)| 基本的线程机制
0. 前言 Java 为了实现跨平台,在语言层面上实现了多线程.我们只需要熟悉 Java 这一套多线程机制就行了,比 C/C++ 要容易多了. 1. 定义任务 我们编写程序,最终是为了完成特定的任务. ...
- java多线程面试_Java多线程和并发基础面试问答,看过后你不会后悔
***:Java多线程面试问题 1:进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java ...
- java volatile 死锁_Java 多线程:volatile 变量、happens-before 关系及内存一致性
原标题:Java 多线程:volatile 变量.happens-before 关系及内存一致性 来源:ImportNew - paddx 更新 请参考来自 Jean-philippe Bempel ...
- java 缓存一致性_Java多线程——CPU缓存原理和缓存一致性问题
说起Java中的多线程,就不得不说volatile关键词volatile关键词执行修饰变量和实例变量,不能修饰方法参数,局部变量和实例常量. volatile是Java提供的一种轻量级的同步机制,在并 ...
- java 多线程 总结_Java 多线程总结
昨天熬了个通宵,看了一晚上的视频,把java 的多线程相关技术重新复习了一遍,下面对学习过程中遇到的知识点进行下总结. 首先我们先来了解一下进程.线程.并发执行的概念: 进程是指:一个内存中运行的应用 ...
- java 多线程 关键字_java多线程基础(synchronize关键字)
线程:进程(process)就是一块包含了某些资源的内存区域.操作系统利用进程把它的工作划分为一些功能单元. 线程:进程中所包含的一个或多个执行单元称为线程(thread).进程还拥有一个私有的虚拟地 ...
- java thread类_Java多线程原理及Thread类详解
多线程原理 代码如下: 自定义线程类: 测试类: 流程图: 程序启动运行main时候,java虚拟机启动一个进程,主线程main在main()调用时候被创建.随着调用mt的对象的start方法,另外一 ...
- java并发多线程面试_Java多线程并发面试问答
java并发多线程面试 Today we will go through Java Multithreading Interview Questions and Answers. We will al ...
最新文章
- Redis在SSM项目中的简单使用
- STM32常用数据类型 u8、u16、u32
- 7.7. 其他证书工具
- arthas class/classloader相关命令之一:sc、sm
- C++98C++11的区别
- SQL终极优化(包括很多非索引方面的优化和原理)
- mat-form-field must contain a MatFormFieldControl错误的解决方法
- 工作247:uniapp--实战--flex布局--商户星级
- 001 基本的环境的安装
- sping 总结(03)springmvc
- html中如何淡化背景图片,如何去除图片背景?
- 台式计算机主板接口识别,硬件丨当前台式机主板接口知识普及与主板结构全讲解...
- 注释里面 //TODO... 的作用
- python新打包工具,最好用的版本之一,不接受反驳
- android模拟器 知乎,安卓模拟器排行榜 知乎大神评测速度多开哪个好
- (附源码)springboot基于微信小程序的校园外卖系统 毕业设计091024
- python网页转PDF
- 机器学习的可解释性(总结)
- 【Halcon视觉】定位
- 某杭州女人的择偶标准
热门文章
- linux 系统挂载ISO 文件
- 路由器中继模式WISP、Client + AP、AP模式的区别和适使用场景
- 就计算机应用领域而言航天器,婴幼儿耳道长耵聍,应该用()工具取出A.耳挖勺B.火柴棍C.棉签D.卡子...
- Windows 7 插件KB4474419安装 Symantec Endpoint Protection 只能安装在具有SHA-2代码签名支持更新(KB4474419)的系统上
- xp任务栏一直闪跳怎么办_电脑任务栏闪烁以及任务栏图标闪烁解决办法
- 《幸福来敲门》观后感
- NOIp模拟赛 巨神兵(状压DP 容斥)
- NoteExpress
- 日语学习网站分类汇总
- 使用GDAL实现DEM的地貌晕渲图(三)