自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 ReentrantLock介绍

提供了比更加灵活和强大的锁机制,可以处理更多复杂的并发场景。它适用于需要高性能和更高级锁特性的场合,如可中断的锁获取、定时锁获取和公平锁等。正确使用,可以显著提高并发程序的可靠性和性能。以下是一个完整示例,展示了的常见用法:try {// 代码i < 5;t2.start();

2024-06-06 19:18:16 435

原创 谈谈synchronized和ReentrantLock

synchronized 适用于简单的同步需求,代码简洁,管理方便,但缺乏灵活性,ReentrantLock 适用于复杂的同步需求,提供了更高的灵活性和更多的控制选项,但代码复杂度更高,需要显式管理锁的获取和释放。

2024-06-06 19:08:53 112

原创 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 347

原创 CAS机制

1、ABA问题:如果一个变量在CAS操作期间发生了变化,变成了另一个值然后又变回了原来的值,CAS操作无法察觉这种变化,这种情况称为ABA问题,解决方法包括使用版本号。3、只能保证一个变量的原子操作:CAS操作通常只能保证一个变量的原子操作,对于多个变量的原子操作需要复杂的逻辑。比较内存位置的当前值与期望值,如果内存位置的当前值等于期望值,则将新值写入该内存位置,否则,不进行任何操作。2、高性能:由于CAS是硬件指令级别的原子操作,通常比传统的锁机制更高效。

2024-05-29 15:01:33 139

原创 synchronized 关键词

进入同步方法或同步代码块,首先检查对象头中的MarkWord,看是否处于偏向锁状态,如果MarkWord表明对象处于偏向锁状态,并且当前线程为偏向线程,直接进入同步块,否则,尝试CAS(Compare-And-Swap)操作设置当前线程为偏向线程,如果CAS操作失败,锁膨胀为轻量级锁,当前线程在栈中创建一个锁记录(Lock Record),并尝试将对象头的MarkWord替换为指向锁记录的指针,如果轻量级锁获取失败,锁膨胀为重量级锁,挂起当前线程,并将其放入Monitor的Entry List中等待。

2024-05-28 22:31:49 252

原创 DyJava

DyJava 是一款功能强大的抖音 Java 开发工具包,支持多种抖音开发功能模块的后端开发,包括但不限于移动 / 网站应用、开放平台、抖店和小程序等。DyJava 致力于简化开发流程,提高开发效率,让开发者能够更专注于创新和业务逻辑的实现。我自己写的工具包,感兴趣的可以联系我。

2024-04-16 15:25:33 521 2

原创 Spring中Bean的生命周期

初始化完成后,Bean 就可以被其他组件使用了。这个阶段的实现细节取决于应用程序的具体需求,可以将 Bean 注入到其他 Bean 中,或者直接调用 Bean 的方法来完成业务逻辑。在实例化阶段,Spring 负责根据配置信息创建 Bean 的实例。在属性注入完成后,Spring 负责调用 Bean 的初始化方法。在实例化完成后,Spring 负责将配置的属性值注入到 Bean 中。在容器关闭时,Spring 负责调用 Bean 的销毁方法。

2024-04-12 15:34:25 274

原创 Spring容器的实现

在项目的资源目录(如 src/main/resources)下创建一个 XML 文件,命名为applicationContext.xml,用于定义 Spring 容器的配置-- 在这里定义 Bean -->-- 示例:定义一个名为 "userService" 的 Bean -->-- 可以在这里设置 Bean 的属性 -->-- 示例:设置 userService 的一个属性 --></bean>-- 可以继续定义其他 Bean --></beans>

2024-04-12 15:29:29 826

原创 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 828

原创 《Go语言基础入门》

第一章: 开始第五章: 数组与切片第六章: 映射与结构体第七章: 方法与接口第八章: 并发编程第十章: 错误处理。

2024-04-08 10:47:59 1381

原创 rabbitmq 解决数据同步顺序消费导致消息堆积

第二个想法是在单消费者中使用线程池,通过多线程的方式加快消费速度,但是这个无法保证消息消费顺序,暂未想到解决方案。通过计算唯一ID的hash值获取执行线程,这样保证相同数据使用同一个线程执行,加快消费速度,保证数据消费顺序。第三个想法是拆分队列,将新增、删除、修改等消息放入不同队列,但是还是没有想到如何保证数据可以顺序消费方案。第一个想法就是增加消费者,保证消息能够快速消费,但是这个无法保证消息消费顺序,暂未想到方案。2、监听定义20个队列同时消费,如果消费还是慢,可以扩容初始化队列数。

2024-03-01 11:47:02 489

原创 博客摘录「 kamailio日志设置」2023年8月28日

local0.* -/var/log/kamailio.log

2023-09-03 15:27:11 181

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除