【Java】IdentityHashMap 的使用场景

文章目录

    • 前言
    • 1. Druid 应用场景
    • 2. IdentityHashMap 特性
    • 3. IdentityHashMap 同步化
    • 4. IdentityHashMap 处理key为空值
    • 后记

前言

最近有兴趣看一下 Druid 连接池怎么做连接管理的,看到一个类 IdentityHashMap ,这里记录一下使用场景。

1. Druid 应用场景

  • 定义
protected final Map<DruidPooledConnection, Object> activeConnections 
= new IdentityHashMap<DruidPooledConnection, Object>();
  • 最外层调用
	if (url.startsWith("/activeConnectionStackTrace-") && url.endsWith(".json")) {
        Integer id = StringUtils.subStringToInteger(url, "activeConnectionStackTrace-", ".");
        // 内部从IdentityHashMap的容器中取值
        return returnJSONActiveConnectionStackTrace(id);
    }
  • 用法概括
    Druid 的特点就是做监控,每一个连接,也就是 DruidPooledConnection 都对应一个调用栈的详情。
    这些连接的调用栈信息保存到 IdentityHashMap<DruidPooledConnection, Object>
    中,对外提供查询服务。

2. IdentityHashMap 特性

观察一下 IdentityHashMap 的 key的hash值,来自于该对象的应用地址。
在这里插入图片描述
言下之意是:IdentityHashMap 的 key ,无论属性如何改变都不影响容器的寻址
Druid 就是用这个特性保留连接的堆栈记录

3. IdentityHashMap 同步化

Collections.synchronizedMap(new IdentityHashMap<Object, ObjectName>());
  • Druid 内部线程安全的用法
    在这里插入图片描述
  • 外层使用
    在这里插入图片描述
    前文一直疑惑为什么把value泛型指定为 Object,这里倒是看懂了,这个容器有很多统计类型数据。感慨一下这个泛化的map也太多地方用了吧,业务代码这么写会被吐槽吧。

4. IdentityHashMap 处理key为空值

类比一下 HashMap,可以存储 null 的 key,是把 null 映射为 0
在这里插入图片描述

而 IdentityHashMap 将 null 映射为空对象
在这里插入图片描述在这里插入图片描述

后记

如果有池化管理对象的需求(比如连接池),且考虑将对象作为某个容器的key,此时可以考虑使用 IdentityHashMap

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库语法(二)

一、数据库的创建 创建数据库CRATE DATABASE语法&#xff1a;CREATE DATABASE [IF NOT EXISTS]数据库名;功能&#xff1a;用给定的名字创建一个数据库如果数据库已经存在&#xff0c;发生一个错误。查看创建数据库&#xff1a;SHOW CREATE DATABASE <数据库名>&#xff…

通过键值对访问字典

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;如果想将字典的内容输出也比较简单&#xff0c;可以直接使用print()函数。例如&#xff0c;要想打印dictionary字典&#xff…

【Redis】Widows 和 Linux 下使用 Redis

Redis 简述 1.缓存 缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段,现代 CPU 越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。 2.Redis Redis …

神龙秘籍 无极神功 无极管理 真正的力量来自于自我内心。每个人都有潜力成为伟大的,只需要相信自己并发现内在的力量。

功夫熊猫中神龙秘籍的含义 在动画电影《功夫熊猫》中&#xff0c;神龙秘籍&#xff08;Dragon Scroll&#xff09;是一个具有重要象征意义的物品。影片通过神龙秘籍传达了几个深刻的主题和教训。 内在力量与自我发现&#xff1a;当阿宝&#xff08;Po&#xff09;最终打开神龙…

【物联网实战项目】STM32C8T6+esp8266/mqtt+dht11+onenet+uniapp

一、实物图 前端uniapp效果图&#xff08;实现与onenet同步更新数据&#xff09; 首先要确定接线图和接线顺序&#xff1a; 1、stm32c8t6开发板连接stlinkv2下载线 ST-LINK V2STM323.3V3.3VSWDIOSWIOSWCLKSWCLKGNDGND 2、ch340串口连接底座&#xff08;注意RXD和TXD的连接方式…

如何理解 Java 类和对象

Java 中的类和对象是学习 Java 编程的基础之一。类是 Java 中的核心概念之一&#xff0c;它提供了一种组织和封装数据以及相关行为的方式。对象是类的实例&#xff0c;它是在运行时创建的&#xff0c;具有特定的状态和行为。 类和对象的概念 1. 类&#xff08;Class&#xff…

访问构造方法(反射)

文章目录 前言一、反射是什么&#xff1f;二、访问构造方法 1.Constructor对象的获取方法2.Constructor方法的使用总结 前言 Java的反射机制可以实现访问、检测和修改Java对象本身信息的功能&#xff0c;在java.lang.reflect包下提供此功能。可以使程序员更加深入地控制程序的运…

缓存降级

当Redis缓存出现问题或者无法正常工作时,需要有一种应对措施,避免直接访问数据库而导致整个系统瘫痪。缓存降级就是这样一种机制。 主要的缓存降级策略包括: 本地缓存降级 当Redis缓存不可用时,可以先尝试使用本地进程内缓存,如Guava Cache或Caffeine等。这样可以减少对Redis…

如何在工信部教考中心官网查询PG证书

1.第一步&#xff1a;进入工业和信息化部教育与考试中心官网 2.第二步&#xff1a;点击最右边“证书查询” 3.点击“工业和信息化部教育与考试中心培训评价证书查询” 4.在该页面按照如下方式进行证书查询&#xff1a;输入您的证件号码和您的证书号码以及姓名&#xff0c;点…

十四天学会Vue——Vue核心(理论+实战)中篇(第二天)

声明&#xff1a;是接着上篇讲的哦&#xff0c;感兴趣可以去看一看~ 这里一些代码就不写了&#xff0c;为了缩减代码量&#xff0c;大家知道就可以了&#xff1a; Vue.config.productionTip false //阻止 vue 在启动时生成生产提示。热身小tips&#xff0c;可以安装这个插件&…

免费wordpress中文主题

免费大图wordpress主题 首页是一张大图的免费wordpress主题模板。简洁实用&#xff0c;易上手。 https://www.jianzhanpress.com/?p5857 免费WP模板下载 顶部左侧导航条的免费WP模板&#xff0c;后台简洁&#xff0c;新手也可以下载使用。 https://www.jianzhanpress.com/…

idea改了代码,但是需要紧急切换分支,需要把改动的保存到本地

但是如果有冲突&#xff0c;你没有合并&#xff0c;那也会丢哦&#xff01; 改完那个分支&#xff0c;回到这个分支然后弹出来再。

WGCLOUD使用下发指令重启安卓设备

wgcloud的下发命令很好使&#xff0c;可以下发很多命令&#xff0c;最好的是可以选择很多主机同时下发命令 这里我想重启下我的安卓设备&#xff0c;只需要下发一个命令&#xff1a; bash reboot 就好啦 如下图

微信公众号完成自动回复,自定义菜单

微信公众号完成自动回复&#xff0c;自定义菜单 首先要获取到微信公众号的开发者权限&#xff0c;这一步省略&#xff0c;可以自行百度 微信公众号对接自己的服务器 首先第一步需要有自己的服务器和固定的ip&#xff0c; 其中&#xff0c;80/443端口需要有其中一个&#xff0…

按尺寸筛选轮廓图中的轮廓

1.按短边筛选 原始轮廓图&#xff1a; import cv2 import numpy as np# 读取轮廓图 contour_image cv2.imread(..\\IMGS\\pp_edge.png, cv2.IMREAD_GRAYSCALE)# 使用cv2.findContours()函数获取所有轮廓 contours, _ cv2.findContours(contour_image, cv2.RETR_EXTERNAL, cv2…

据阿谱尔APO Research调研显示,2023年全球绝缘栅双极晶体管(IGBT)市场销售额约为89.9亿美元

根据阿谱尔 (APO Research&#xff09;的统计及预测&#xff0c;2023年全球绝缘栅双极晶体管&#xff08;IGBT&#xff09;市场销售额约为89.9亿美元&#xff0c;预计在2024-2030年预测期内将以超过14.7%的CAGR&#xff08;年复合增长率&#xff09;增长。 由于各行业对电力电子…

XSKY CTO 在英特尔存储技术峰会的演讲:LLM 存储,架构至关重要

5 月 17 日&#xff0c;英特尔存储技术峰会在北京顺利举办。作为英特尔长期的合作伙伴&#xff0c;星辰天合受邀参加了此次峰会。星辰天合 CTO 王豪迈作为特邀嘉宾之一&#xff0c;作了主题为《LLM 存储&#xff1a;架构至关重要》的演讲&#xff0c;分享了大语言模型&#xff…

jmeter发送webserver请求和上传请求

有时候在项目中会遇到webserver接口和上传接口的请求&#xff0c;大致参考如下 一、发送webserver请求 先获取登录接口的token&#xff0c;再使用cookie管理器进行关联获取商品(webserver接口)&#xff0c;注意参数一般是写在消息体数据中&#xff0c;消息体有点像HTML格式 执…

Java整合EasyExcel实战——2 导出复杂表头

详情代码 实体类 Data public class ComplexHeadData {ExcelProperty({"主标题", "字符串标题"})private String string;ExcelProperty({"主标题", "日期标题"})private Date date;ExcelProperty({"主标题", "数字标…

(2024,DDDM,ODE,少量步生成,迭代生成)直接去噪扩散模型

Directly Denoising Diffusion Model 公众号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 直接去噪扩散模型 3.1. 迭代求解 4. Psuedo-LPIPS 指标 5. 实验 7. 讨论和局限性 0. 摘…