- 博客(13)
- 收藏
- 关注
原创 开源呼叫中心新标杆:openCallHub 助力企业高效通信
在数字化转型浪潮中,呼叫中心系统已成为企业客户服务的关键枢纽。闭源系统的高昂成本与复杂协议的集成门槛。为此,我们推出开源项目,基于 Java 17 + Spring Boot 3 构建,集成了 FreeSWITCH、Kamailio 等通信组件,为企业提供灵活可定制的智能通信解决方案。
2025-03-07 17:07:27
910
原创 ReentrantLock介绍
提供了比更加灵活和强大的锁机制,可以处理更多复杂的并发场景。它适用于需要高性能和更高级锁特性的场合,如可中断的锁获取、定时锁获取和公平锁等。正确使用,可以显著提高并发程序的可靠性和性能。以下是一个完整示例,展示了的常见用法:try {// 代码i < 5;t2.start();
2024-06-06 19:18:16
477
原创 谈谈synchronized和ReentrantLock
synchronized 适用于简单的同步需求,代码简洁,管理方便,但缺乏灵活性,ReentrantLock 适用于复杂的同步需求,提供了更高的灵活性和更多的控制选项,但代码复杂度更高,需要显式管理锁的获取和释放。
2024-06-06 19:08:53
130
原创 Object o = new Object() 确定对象实例的大小
12字节 = 8字节MarkWord + 4字节ClassPointer + 0字节实例数据,但是需要填充4字节以达到8的倍数,所以启用压缩指针的情况下,总大小为16字节。JVM中的对象通常要求按8字节对齐,这意味着对象的总大小必须是8字节的倍数,如果对象的实际大小不是8字节的倍数,JVM会添加填充字节(为了提高内存访问的效率和性能)16字节 = 8字节MarkWord + 8字节ClassPointer + 0字节实例数据,总大小为16字节,已经是8的倍数,所以不需要额外的对齐填充。
2024-05-29 15:54:26
375
原创 CAS机制
1、ABA问题:如果一个变量在CAS操作期间发生了变化,变成了另一个值然后又变回了原来的值,CAS操作无法察觉这种变化,这种情况称为ABA问题,解决方法包括使用版本号。3、只能保证一个变量的原子操作:CAS操作通常只能保证一个变量的原子操作,对于多个变量的原子操作需要复杂的逻辑。比较内存位置的当前值与期望值,如果内存位置的当前值等于期望值,则将新值写入该内存位置,否则,不进行任何操作。2、高性能:由于CAS是硬件指令级别的原子操作,通常比传统的锁机制更高效。
2024-05-29 15:01:33
157
原创 synchronized 关键词
进入同步方法或同步代码块,首先检查对象头中的MarkWord,看是否处于偏向锁状态,如果MarkWord表明对象处于偏向锁状态,并且当前线程为偏向线程,直接进入同步块,否则,尝试CAS(Compare-And-Swap)操作设置当前线程为偏向线程,如果CAS操作失败,锁膨胀为轻量级锁,当前线程在栈中创建一个锁记录(Lock Record),并尝试将对象头的MarkWord替换为指向锁记录的指针,如果轻量级锁获取失败,锁膨胀为重量级锁,挂起当前线程,并将其放入Monitor的Entry List中等待。
2024-05-28 22:31:49
273
原创 DyJava
DyJava 是一款功能强大的抖音 Java 开发工具包,支持多种抖音开发功能模块的后端开发,包括但不限于移动 / 网站应用、开放平台、抖店和小程序等。DyJava 致力于简化开发流程,提高开发效率,让开发者能够更专注于创新和业务逻辑的实现。我自己写的工具包,感兴趣的可以联系我。
2024-04-16 15:25:33
659
2
原创 Spring中Bean的生命周期
初始化完成后,Bean 就可以被其他组件使用了。这个阶段的实现细节取决于应用程序的具体需求,可以将 Bean 注入到其他 Bean 中,或者直接调用 Bean 的方法来完成业务逻辑。在实例化阶段,Spring 负责根据配置信息创建 Bean 的实例。在属性注入完成后,Spring 负责调用 Bean 的初始化方法。在实例化完成后,Spring 负责将配置的属性值注入到 Bean 中。在容器关闭时,Spring 负责调用 Bean 的销毁方法。
2024-04-12 15:34:25
286
原创 Spring容器的实现
在项目的资源目录(如 src/main/resources)下创建一个 XML 文件,命名为applicationContext.xml,用于定义 Spring 容器的配置-- 在这里定义 Bean -->-- 示例:定义一个名为 "userService" 的 Bean -->-- 可以在这里设置 Bean 的属性 -->-- 示例:设置 userService 的一个属性 --></bean>-- 可以继续定义其他 Bean --></beans>
2024-04-12 15:29:29
871
原创 JVM基础理解
Java 虚拟机(Java Virtual Machine,JVM)是 Java 程序的运行环境,它负责解释和执行 Java 字节码,并管理程序运行期间的内存、线程等资源。JVM 的诞生与 Java 语言的诞生密切相关,是 Java 语言跨平台特性的关键所在。JVM 的历史可以追溯到 1995 年,当时 Sun 公司发布了 Java 语言和 Java 虚拟机的第一个版本。最初的 JVM 实现是由 Sun 公司的工程师在 C 语言中编写的,它可以解释执行 Java 字节码。
2024-04-08 14:08:07
850
原创 rabbitmq 解决数据同步顺序消费导致消息堆积
第二个想法是在单消费者中使用线程池,通过多线程的方式加快消费速度,但是这个无法保证消息消费顺序,暂未想到解决方案。通过计算唯一ID的hash值获取执行线程,这样保证相同数据使用同一个线程执行,加快消费速度,保证数据消费顺序。第三个想法是拆分队列,将新增、删除、修改等消息放入不同队列,但是还是没有想到如何保证数据可以顺序消费方案。第一个想法就是增加消费者,保证消息能够快速消费,但是这个无法保证消息消费顺序,暂未想到方案。2、监听定义20个队列同时消费,如果消费还是慢,可以扩容初始化队列数。
2024-03-01 11:47:02
622
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人