【HikariCP】【SuspendResumeLock】源码学习

MDK开发篇:基于立创逻辑派FPGA-G1与Cortex-M1软核的按键控制LED实战 本文详细介绍了基于立创逻辑派FPGA-G1开发板与高云Cortex-M1软核的完整开发流程。通过Gowin云源软件配置软核系统与GPIO外设,并在Keil MDK环境中编写按键控制LED的C程序,最终实现程序固化与上电自启动。教程涵盖硬件配置、软件开发、在线调试与固化部署全步骤,帮助STM32开发者快速上手FPGA软核开发。 阅读详情

Hikari目前已经是springboot的默认数据库连接池,并且以高效和轻量著称,因为代码量比较少,所以可以阅读一下,学习一下,github地址:HikariCP

SuspendResumeLock

数据库连接池暂停恢复锁。如果hikari配置中设置isAllowPoolSuspension为true,那么就会在HikariPool中实例一个暂停恢复锁。

空锁

public static final SuspendResumeLock FAUX_LOCK = new SuspendResumeLock(false) {
  @Override
  public void acquire() {}

  @Override
  public void release() {}

  @Override
  public void suspend() {}

  @Override
  public void resume() {}
};

类中首先创建了一个单例空锁,中间没有实现任何方法,这个对象是用在连接池不需要暂停恢复锁时传入的对象。

成员变量

  • private static final int MAX_PERMITS = 10000;
    信号量最大值为10K

  • private final Semaphore acquisitionSemaphore;
    这个Semaphore信号量在当时阅读《JAVA并发编程实战》中看到过,笔记描述为:

Semaphore中管理着一组虚拟的许可(permit),许可的初始数量可通过构造函数来指定,在执行操作时可以首先获取许可(只要还有剩余的许可),并在使用以后释放许可。如果没有许可,那么acquire将阻塞直到有许可(或者直到被中断或者操作超时)。release方法将返回一个许可给信号量。计算信号量的一种简化形式是二值信号量,即初始值为1的Semaphore。二值信号量可以用做互斥体(mutex),并具备不可重入的加锁语义:谁拥有这个唯一的许可,谁就拥有了互斥锁。

release返回许可信号量的实现不包含真正的许可对象,而且Semaphore也不会将许可和线程关联起来,因此在一个线程中获取的许可可以在另一个线程中释放。可以将acquire操作视为是消费一个许可,而release操作是创建一个许可,Semaphore并不受限于它在创建时的初始许可数量。

按照笔记中的描述,其实就是在限制连接的数量,如果连接超过10K,那么就会阻塞直到有别的连接断开后释放了信号量。这是控制IO流量的一种常见的方式。

构造方法

public SuspendResumeLock()
{
  this(true);
}

private SuspendResumeLock(final boolean createSemaphore)
{
  acquisitionSemaphore = (createSemaphore ? new Semaphore(MAX_PERMITS, true) : null);
}

默认构造器是带锁的,信号量的值为10K

Semaphore方法

  • public void acquire()
public void acquire() throws SQLException
{
  if (acquisitionSemaphore.tryAcquire()) {
     return;
  }
  else if (Boolean.getBoolean("com.zaxxer.hikari.throwIfSuspended")) {
     throw new SQLTransientException("The pool is currently suspended and configured to throw exceptions upon acquisition");
  }

  acquisitionSemaphore.acquireUninterruptibly();
}

获取信号量方法,首先会尝试获取信号量,如果没有获取到并且配置文件配置了获取不到抛出异常,那么就会抛出sql异常。如果没有配置,那么就调用acquireUninterruptibly()方法继续等待获取信号量

  • public void release()
public void release()
{
  acquisitionSemaphore.release();
}

释放线程持有的信号量

  • public void suspend()
public void suspend()
{
  acquisitionSemaphore.acquireUninterruptibly(MAX_PERMITS);
}

获取所有信号量导致暂停

  • public void resume()
public void resume()
{
  acquisitionSemaphore.release(MAX_PERMITS);
}

释放所有信号量恢复连接池

基于matlab的CNN食物识别分类系统,matlab深度学习分类,训练+数据集+界面 饮食在人们的日常生活、营养与医疗建议以及运动员等专业人士的训练上起着越来越重要的作用。随着互联网的发展和医学的进步,人们普遍上传分享和记录的食物图像形成了非常多的数据库,为了改善饮食结构,塑造更健康的生活方式,分析食物的种类、热量和进食时间成为了营养学上非常重要的研究方法,本文的使用深度学习算法可以根据用户上传的食物图像自动分析食物种类。深度学习是机器学习领域的一个研究方向。深度学习通过对数据特征的学习将原始数据转化为计算机可以理解的抽象数据,根据学习到的特征,可以对原始数据进行检测或分类。 阅读详情

相关推荐

FPGA实现高效数字下变频:CORDIC与CIC滤波器的Verilog优化设计

本文深入探讨了FPGA实现高效数字下变频的技术方案,重点介绍了CORDIC算法与CIC滤波器的Verilog优化设计。通过详细的算法原理分析、FPGA实现技巧和实战经验分享,展示了如何利用CORDIC的旋转运算替代乘法操作,以及CIC滤波器在降采样中的高效性能。文章还提供了完整的系统集成方案和资源优化策略,为无线通信和雷达信号处理领域的工程师提供了实用参考。

redis7keeper的博客 721

suspend和resume死锁案例

suspend和resume死锁案例suspend和resume死锁示例代码1(未释放锁)死锁代码2(调用顺序) suspend和resume 这是java API种已经启用的方法。(不建议使用) suspend和resume操作有严格的使用顺序 1.suspend必须在resume执行之前。 2.、suspend 挂起并不会释放锁。 死锁示例代码1(未释放锁) 下面展示一些 内联代码片。 … /* 包子店 / public static Object baozidian = null; /* 死锁的s

qq_37950333的博客 748

从零到一:Ollama工具在RK3588上的深度优化实践

本文详细介绍了如何在RK3588开发板上深度优化Ollama工具,以高效运行DeepSeek模型。通过CPU与NPU负载平衡、模型量化、温度控制等策略,显著提升性能并降低功耗,适用于边缘计算场景。文章提供了具体的配置命令和优化方案,帮助开发者充分发挥RK3588的硬件潜力。

rgv23456789的博客 311

聊聊hikari连接池的isAllowPoolSuspension

序 本文主要研究一下hikari连接池的isAllowPoolSuspension属性 实例代码 @Test public void testPoolSuspend() throws SQLException { Connection conn = dataSource.getConnection(); System.out.println("begin to suspend p...

weixin_33922670的博客 619

《C语言小游戏之贪吃蛇程序代码》

//为广大编程游戏爱好者提供一个参考的游戏源代码#include<stdio.h>#include<conio.h>#include<windows.h>#include<time.h>#define framex 5#define framey 5#define wide 20#define high 20int i,j,a[2];//将光标移动到...

qq_42052821的博客 2万+

手把手调试Altera FPGA远程升级:从ASMI扇区擦除到Remote Update IP配置的避坑实录

本文详细解析了Altera FPGA远程升级的全流程,重点介绍了Cyclone IV系列FPGA的ASMI扇区擦除和Remote Update IP配置的实战技巧。通过双镜像架构设计、ASMI IP核优化配置及Remote Update IP的隐藏参数设置,帮助开发者避免常见陷阱,提升远程升级的可靠性和效率。

weixin_30872499的博客 447

连接池 HikariPool (一) - 基础框架及初始化过程

高性能数据库连接池HikariPool源码分析 连接池 多线程 线程池

weixin_44612246的博客 6823

MySQL常见面试题汇总(建议收藏!!!)

目录一、索引相关(1)什么是索引?(2)索引是个什么样的数据结构呢?(3)为什么使用索引?(4)Innodb为什么要用自增id作为主键?(5)Hash 索引和 B+ 树索引有什么区别或者说优劣呢?(6)什么是聚簇索引(6)非聚簇索引一定会回表查询吗?(6)聚簇索引和非聚簇索引的区别(6)MyISAM和InnoDB实现B+树索引方式的区别是什么?(6)MySQL中有四种索引类型,可以简单说说吗?(6)覆盖索引是什么?(6)联合索引是什么?为什么需要注意联合索引中的顺序?(6)创建的索引有没有被使用到?或者说怎

蔡政洁的博客 7万+

【追光者系列】HikariCP 源码分析之 allowPoolSuspension

点击上方“芋道源码”,选择“置顶公众号”技术文章第一时间送达!源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69+ 篇,预计总共 75+ 篇 )中文详细注释...

芋道源码 1094

利用Langchain生成合成数据的实践指南

合成数据是相对于从真实世界事件中收集的数据而言的人工生成的数据。它用于模拟真实数据,同时避免隐私泄露或遇到真实数据中的局限性。:尽管合成数据有诸多优点,但应谨慎使用,因为它可能无法捕捉真实世界的复杂性。

eahba的博客 397

SAP 零售 FMS 物料主数据(一)

SAP 零售 FMS 物料主数据(一) SAP 对于鞋服行业最新的解决方案-FMS(相当于原来的AFS+Retail);更偏向与零售; 商品主数据与原来的AFS大不相同,取消了原来的Grid的网格概念,取而代之的是变式;商品主数据维护也偏向于Retail的维护模式;事物代码也不是MM01而是MM41 /MM46; 在维护商品主数据前,需要与商品部沟通定义各种商品相关的规范如编码规则,大中小类 ,颜色库,尺码库等,此处不赘述; 创建商品需要确定哪些物料是变式物料,哪些是常规不带特性的单一物料;这决定了在创建商

weixin_45518759的博客 5061

Java多线程通信Suspend和Resume,为什么被弃用,如何导致死锁

文章目录Suspend和Resume作用Suspend和Resume为什么被启动 Suspend和Resume作用 suspend: 让线程挂起,暂停,程序停止往下执行。 resume: 唤醒被suspend的程序,让程序继续执行。 代码示例 一个是消息发送者,一个是消息接受着,当消息发送者有消息了,马上通知接受者接受消息。 /** * 测试 suspend 和 resume */ public void testsSuspendAndResume() {

爱折腾的Albert 1215

STM32 TIM3硬件XOR+复位模式实现霍尔信号精准捕获

霍尔传感器是电机控制系统中获取转子位置的关键器件,其三路数字信号需通过高精度、低延迟的边沿检测机制转换为电角度信息。其核心原理在于利用定时器输入XOR逻辑合并多路信号,并结合从模式复位(Reset Mode)实现硬件级时间间隔测量——每次跳变强制计数器清零,使CNT值直接表征换相周期。该方案规避了软件轮询的不确定性,显著提升FOC控制的实时性与鲁棒性。典型应用场景包括BLDC/FOC电机驱动、机器人关节伺服及工业变频器设计,尤其适用于STM32F4系列等具备硬件XOR与从模式控制器的MCU平台。

weixin_28931507的博客 91

HikariCP 源码分析之 allowPoolSuspension 万字详解

本文深入分析了HikariCP连接池的allowPoolSuspension配置项,揭示其实现原理与应用场景。文章首先介绍了该参数的功能定义与配置方式,随后详细解析了其核心实现机制SuspendResumeLock的设计原理,包括挂起/恢复操作的锁控制和线程等待处理。通过源码分析展示了该特性如何与连接获取流程交互,并提供了数据库维护和流量控制两大典型应用场景。最后总结了该功能的设计特点、使用注意事项和监控建议,指出其虽为高级功能但需谨慎使用,特别强调了在实现精巧的同时必须配备完善的监控机制。全文从实现到应用

油墨香^-^的博客 791

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数据库连接池Hikaricp源码分析

hikaricp总结:借助哪些技术使性能超越其他线程池的? 为了性能,自定义数据结构:FastList、ConcurrentBag 主要就是ConcurrentBag使用threadLocal、shareList、等待queue 对获取connnection做了优化。 定时器相关的使用:scheduleWithFixedDelay(Runnable com...

时间道的博客 598

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android中休眠与唤醒之wake_lock, early_suspend, late_resume

最近研究如何让Android不休眠。听组里人说,机器在充电的时候不休眠。我试了一下,确实是,串口可以使用(CONFIG_PM_DEBUG并没有打开)。 这个时候,LCD显示屏是休眠了,触摸屏也休眠了,其他的比如重力传感器等就没有看了,但是标准的Linux系统并没有进入休眠。看了网上好多关于Android系统的休眠与唤醒 例子,感觉有些懵懵懂懂的。于是,还是看内核代码吧。         An

井朝天的专栏 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

HikariCP 源码分析之 leakDetectionThreshold 及实战解决 Spark/Scala 连接池泄漏

点击上方“芋道源码”,选择“置顶公众号”技术文章第一时间送达!源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69+ 篇,预计总共 75+ 篇 )中文详细注释...

芋道源码 7966

连接池 HikariPool (二) - 获取及关闭连接

HikariPool 数据库连接池 连接池的获取及归还 多线程并发

weixin_44612246的博客 6204

java连接池dns切换_聊聊hikari连接池的isAllowPoolSuspension

序本文主要研究一下hikari连接池的isAllowPoolSuspension属性实例代码@Testpublic void testPoolSuspend() throws SQLException {Connection conn = dataSource.getConnection();System.out.println("begin to suspend pool");((HikariD...

weixin_32073733的博客 441

kotlin coroutine源码解析之suspend挂起函数原理

1. 父JobA的lambda表达式中有挂起函数,协程会在父JobA的挂起点处创建一个CancellableContinuationImpl类型的continuation,这个Cancellable会和父JobA进行父子关联;如果挂起函数本身是某个JobB的挂机函数,那么Cancellable还会和JobB组成父子关系,JobB在结束自己的时候,会通知Cancellable自己完成了,Cancellable又会继续通知JobA继续执行lambda的代码块,这样JobA就从挂起点恢复过来了。

u012345683的博客 1804

【Android】 android suspend/resume总结(2)

下面图片对Linux suspend&resume过程做了一个概述,读者可以顺着这个流程阅读内核源代码。具体的说明,可以参考后面的代码分析。

weixin_41028159的博客 3037

【追光者系列】HikariCP连接池监控指标实战

1.这是一个系列,有兴趣的朋友可以持续关注2.如果你有HikariCP使用上的问题,可以给我留言,我们一起沟通讨论3.希望大家可以提供我一些案例,我也希望可以支持你们做一些调优业务方关注哪些数据库指标?首先分享一下自己之前的一段笔记(找不到引用出处了)系统中多少个线程在进行与数据库有关的工作?其中,而多少个线程正在执行 SQL 语句?这可以让我们评估数据库是不是系统瓶颈。多少个线程在等待获取数据库

芋道源码 1万+

HikariCP常用监控指标与故障排查实战

编者有言:本书由资深数据库连接池专家撰写,褚霸、德哥、张亮、吴晟等近10位专家高度评价,从设计思想、功能使用、原理实现、工程实践、技术扩展5个维度对HikariCP进行全面讲解和深入分析...

华章IT官方博客 7129

HikariCP重要参数配置

概述 HikariCP是Spring Framework 5.0的默认 数据库连接池,这得益于他的高性能。但是如果配置不当,数据库连接池也可能因影响到系统性能。 重要参数 maximum-pool-size minimum-idle pool-name auto-commit idle-timeout max-lifetime connection-timeout 初...

Addisoni 5004

HikariCP连接池各属性详解

HikariCP是由日本程序员开源的一个数据库连接池组件,代码非常轻量,并且速度非常的快。根据官方提供的数据,在i7,开启32个线程32个连接的情况下,进行随机数据库读写操作,HikariCP的速度是现在常用的C3P0数据库连接池的数百倍。在SpringBoot2.0中,官方默认也是使用的HikariCP作为数据库连接池,可见HikariCP连接池的目的就是为了极致的数据库连接性能体验。HikariCP优化机制相对于其他的数据库连接池,有着以下的优势

BoCong-Deng的博客 4995

【HikariCP】【HikariDataSource】源码学习

Hikari目前已经是springboot的默认数据库连接池,并且以高效和轻量著称,因为代码量比较少,所以可以阅读一下,学习一下,github地址:HikariCP HikariDataSource 成员变量 private final AtomicBoolean isShutdown = new AtomicBoolean(); 线程安全的连接池是否关闭的标识符 private fin...

非正常人研究室 4768
上一篇: 【HikariCP】【ConcurrentBag】源码学习
下一篇: 【HikariCP】【异常汇总】
ColdFireMan
博客等级 码龄10年 27粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值