线程上下文设计模式

    线程上下文机制是参考应用或者系统上下文的机制,使每个线程拥有自己的上下文,不与其他线程共享。线程上下文机制有不同于其他上下文机制的地方,即线程的生命周期结束后,线程上下文也要回收掉,不然容易出现内存泄露。

    ThreadLocal为每一使用该变量的线程都提供了独立副本,可以做到线程间的数据隔离,每个线程都可以访问各自内部的副本变量。使用ThreadLocal的场景有:

  • 在进行对象跨层传递的时候,可以考虑使用,避免方法多次传递,打破层次间的约束。

  • 线程间的数据隔离

  • 进行事务操作,用于存储线程事务信息

     ThreadLocal并不是解决多线程共享资源的技术。一般情况下,每一个线程的ThreadLocal都存储的是一个全新的对象,如果多线程的ThreadLocal存储了一个对象引用,那么其还面临着资源竞争,数据不一致的并发问题。

     使用ThreadLocal时,最常用的方法是initialValue()、set(T t)、get()。

        initialValue():为ThreadLocal保存的数据类型指定了一个初始化值,默认返回值为null

        set(T t):为ThreadLocal指定要被存储的数据。如果重写了initialValue()方法,在不调用set方法时,数据的初始值就是initialValue()方法的计算结果。

        get():返回当前线程在ThreadLocal中的数据备份,当前线程的数据都存放在ThreadLocalMap的数据结构中。

        无论是get还是set,都不可避免的与ThreadLocalMap和Entry打交道。Entry是一个WeakReference,在没有引用的情况下,可被GC回收,避免内存泄露。

线程上下文设计模式有两种实现方式,第一种:

public class ActionContext {
private static final ThreadLocal<Context> context=ThreadLocal.withInitial(Context::new);public static Context get() {
return context.get();
}static class Context{
private String ip;public String getIp() {
return ip;
}public void setIp(String ip) {
this.ip = ip;
}
}}

第二种:

public class ContextBean {
private int ip;
private String hostName;
public int getIp() {
return ip;
}
public void setIp(int ip) {
this.ip = ip;
}
public String getHostName() {
return hostName;
}
public void setHostName(String hostName) {
this.hostName = hostName;
}
}
public class TaskContext {
private static final ThreadLocal<ContextBean> contextBean=ThreadLocal.withInitial(ContextBean::new);public static ContextBean getConetxt() {
return contextBean.get();
}
public static void set(ContextBean bean) {
contextBean.set(bean);
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线免费压缩pdf文件

在线免费压缩pdf文件&#xff0c;不用登陆哦&#xff0c; https://www.ilovepdf.com/ https://online2pdf.com/#

FFmpeg之HWContextType

HWContextType算是ffmpeg中为硬解码第三方接口的一个辅助类&#xff0c;它自己有两个辅助子类 AVHWDeviceContext和AVHWFramesContext。 AVHWDeviceContext主要表示硬件上下文 AVHWFramesContext主要表示硬件Frame的一些参数&#xff0c;比如你解码后的YUV数据还在硬件上&#…

el-form表单校验输入框值为0时 提示校验不通过

el-form表单校验输入框值为0时提示校验不通过 配置validator自定义校验方法 这里举例在结构代码里加入校验规则 <el-form-item:prop"num":rules"[{required: true,message: 请输入数量,trigger: change,},{validator,trigger: blur}]" ><el-inpu…

软件工程:软件需求规格说明书

常用软件需求规格说明书模板 ISO2006模板示例 示例1

IP属地变化背后的原因

随着互联网的普及和技术的不断发展&#xff0c;IP属地变化的现象越来越受到人们的关注。近日&#xff0c;有网友发现自己的IP属地发生了变化&#xff0c;引发了广泛讨论。那么&#xff0c;IP属地为什么会发生变化呢&#xff1f; 首先&#xff0c;网络环境的变化是导致IP属地变化…

uniapp 之 图片 视频 文件上传

<view class"" style"padding: 24rpx 0"><text>相关资料 <text class"fs-26 color-666">&#xff08;图片、视频、文档不超过9个&#xff09;</text> </text><view class"flex align-center" style&…

Python中的内存泄漏及其检测方法

一、引言 内存泄漏是编程中常见的问题之一&#xff0c;它会导致程序在运行过程中不断消耗内存&#xff0c;最终可能导致程序崩溃或性能下降。在Python中&#xff0c;内存泄漏也是一个需要关注的问题。本文将详细介绍Python中的内存泄漏及其检测方法&#xff0c;以帮助读者更好…

转发一篇CAN过滤器配置的文章

一&#xff1a;转发链接 “目前网络上看到CAN过滤器讲得最详细的文章” 二&#xff1a;CAN过滤器是CAN总线系统中的一种设备&#xff0c;它用于过滤和选择总线上的数据帧。 在CAN总线系统中&#xff0c;每个设备都可以发送和接收数据帧。然而&#xff0c;在某些情况下&#xf…

亚马逊云科技re_Invent 2023产品体验:亚马逊云科技产品应用实践 王炸产品Amazon Q,你的AI助手

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 意料之中 2023年9月25日&#xff0c;亚马逊宣布与 Anthropic 正式展开战略合作&#x…

蓝牙指纹定位技术介绍以及代码演示

蓝牙指纹定位技术 蓝牙指纹定位技术是一种基于蓝牙信号强度&#xff08;Bluetooth Signal Strength&#xff09;来进行位置定位的方法。这种技术主要应用于室内定位系统&#xff08;Indoor Positioning System, IPS&#xff09;&#xff0c;因为室内环境对GPS信号的阻隔导致其…

Globalsign—— SSL证书中的LV

一&#xff1a;SSL证书 SSL 证书可以实现网站的 https 加密&#xff0c;保证从客户端到服务端传输的数据是加密的。越来越多的网络信息泄露事件也给我们敲响了警钟&#xff0c;信息安全不容小觑。网站建设者们也应该要把网络信息安全放在首位&#xff0c;给网站部署 SSL …

第一个“hello Android”程序

1、首先安装Android studio&#xff08;跳过&#xff09; Android Studio是由Google推出的官方集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于Android应用程序的开发。它是基于JetBrains的IntelliJ IDEA IDE构建的&#xff0c;提供了丰富的功能和工具&#xff0…

8V-24V升降12V2A升降压芯片WT3205

8V-24V升降12V2A升降压芯片WT3205 WT3205是一款专为升压开关电源设计的DC-DC直流转换控制器。 WT3205的输入电压范围是5V至32v&#xff0c;电路元器件少&#xff0c;应用简单。WT3205采用固定频率的PWM控制方式&#xff0c;330KHz的振荡器&#xff0c;电流模式控制单元&#x…

_pickle.PicklingError: Can‘t pickle : import of module failed

有问题 没问题的 python - pickle cant import a module that exists? - Stack Overflow

Apifox 最新更新:迭代分支功能上线、在线文档支持多格式导出!

Apifox 新版本上线啦&#xff01; 看看本次版本更新主要涵盖的重点内容&#xff0c;有没有你所关注的功能特性&#xff1a; HTTP 项目新增「迭代分支」功能支持通过数据库表直接生成 API 文档的数据模型在线文档支持多方式导出用户反馈问题优化 数据库支持「测试连接」保持自…

可数集合(可列集合、可列无限集)

凡是和全体正整数所构成的集合对等的集合都称为可数集合、或者叫可列集合、可列无限集。 由于可以按大小顺序排成一个无穷序列&#xff0c;因此一个集合A是可数集合的充要条件为&#xff1a;A可以排成一个无穷序列 可数集合是无限集合。

NorFlash 知识点总结

一、介绍 NorFlash&#xff08;也称为 NOR 型闪存&#xff09;是一种非易失性存储器&#xff0c;常用于嵌入式系统和存储设备中。NorFlash 是一种闪存类型&#xff0c;可以用于存储程序代码、固件、操作系统以及其他数据。与 NAND Flash 相比&#xff0c;NorFlash 具有较低的存…

8性能测试

性能测试 jmeter &#xff08;大量用户&#xff09; 效率分为 时间 &#xff08;处理请求&#xff09; 资源&#xff08;占用cpu 内存 磁盘&#xff09; 性能测试概念:使用自动化工具&#xff0c;模拟不同的场景&#xff0c;对软件各项性能指标进行测试和评估的过程 性…

【infiniband】ibdump抓包

ibdump用于捕获和转储InfiniBand网络的流量。 这种工具通常用于调试和分析InfiniBand网络问题&#xff0c;包括性能瓶颈和配置错误。ibdump工具在Mellanox InfiniBand环境中较为常用&#xff0c;现由NVIDIA提供支持。 使用ibdump的基本步骤 请注意&#xff0c;您需要在安装了…

详解接口测试

目录 什么是接口&#xff1f; 接口协议的类型 接口测试是什么 HTTP接口的测试用例设计 HTTP接口的测试方法 什么是接口&#xff1f; 在面向对象编程中&#xff0c;接口是一个抽象的概念&#xff0c;用于定义类应该具有的方法和属性。一个类可以实现一个或多个接口&#xf…