自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP协议要点整理

该报文中,确认标志位(ACK)设为 1,确认号为客户端的序列号加 1,表示服务器已收到客户端的关闭请求。在这个报文中,确认标志位(ACK)设为 1,确认号为服务器的初始序列号加 1,即 y + 1 ,表示客户端已收到服务器的 SYN + ACK 报文,连接建立成功。此时客户端和服务器都进入。在这个报文段中,客户端将 同步标志位(SYN)设置为 1,同时选择一个初始序列号(Initial Sequence Number,ISN),假设为 x,表示客户端希望建立连接,并告知服务器自己的初始序列号。

2025-07-30 18:03:46 1127

原创 Java动态代理

Java动态代理主要通过JDK原生代理和CGLIB实现。JDK代理基于接口,使用Proxy和InvocationHandler创建代理,在invoke()方法中增强目标对象功能。CGLIB通过继承目标类生成代理,利用MethodInterceptor拦截方法调用,适用于无接口的类。两者广泛用于SpringAOP、ORM框架等场景,JDK代理需接口支持,CGLIB性能更高且能代理普通类。开发中可根据目标对象类型(是否实现接口)选择合适代理方式。

2025-07-30 11:59:43 776

原创 ReentrantLock中的AQS(AbstractQueuedSynchronizer)

AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程等功能,并提供等待队列模型的线程同步框架。总之,AQS 是 Java 并发编程中非常重要的框架,掌握 AQS 的原理和使用方法,对于深入理解 Java 并发包中的各种同步工具,以及开发高效、可靠的并发程序具有重要意义。编辑分享。

2025-07-23 19:22:54 684

原创 Java线程池的状态:状态的保存、切换

线程池状态是指线程池在其生命周期中所处的不同阶段,用于控制和管理线程池的行为。线程池作为一种重要的并发编程工具,其状态管理直接影响到系统的稳定性、性能和资源利用率。• 线程池状态控制着任务的提交和执行,以及工作线程的生命周期。• 状态转换是单向不可逆的,遵循特定的流程。• 使用原子变量和 CAS 操作保证状态转换的线程安全性。• 合理的状态管理是线程池高效、稳定运行的关键。

2025-07-21 19:14:22 757

原创 Java线程池的核心配置参数和流程

Java中线程池的使用广泛,其中ThreadPoolExecutor最为重要,以下是ThreadPoolExecutor的重点说明。

2025-07-21 18:50:48 767

原创 Java中对CAS的理解

Java中很多地方都用到了CAS机制,本文对CAS机制做一个总结。

2025-07-19 14:48:06 1120

原创 Java中BlockingQueue阻塞队列的简单使用------生产者和消费者模型

摘要:BlockingQueue作为Java多线程编程中的关键数据结构,通过阻塞机制高效实现生产者-消费者模型。ArrayBlockingQueue(数组实现)和LinkedBlockingQueue(链表实现)是最常用的实现方式,前者读写互斥,后者支持并发操作。PriorityBlockingQueue支持优先级排序,SynchronousQueue实现直接交付。这些线程安全队列通过put()/take()方法自动处理阻塞/唤醒,简化了并发控制,在任务调度、消息队列等场景中发挥重要作用,既保证了线程安全又

2025-07-19 11:28:29 826

原创 多线程同步并发问题的解决方法和相关案例

多线程任务经常会出现数据不一致的情况,要解决这种问题,就需要使用synchronized同步锁。

2025-07-15 19:28:57 114

原创 利用Java线程技术多线程爬取网站图片

在介绍线程之前,需要介绍程序以及进程相关知识。程序是含有指令和数据的文件。进程是程序从运行到退出的一次执行过程,是操作系统分配资源的基本单位(常见的JVM、微服务等都是进程)。而线程是进程的子任务(进程内部最小执行单元),是处理器任务调度的基本单位,有独立的线程和程序计数器,线程共享所属进程第二点内存、文件等资源。

2025-07-15 11:59:53 543

原创 ArrayList核心代码阅读

ArrayList通过确保容量足够,若不足则grow()进行扩容。默认扩容策略是 1.5 倍,避免过于频繁的数组拷贝。扩容操作涉及,是的封装,保证高效的数组复制。了解ArrayList扩容机制有助于编写高效的代码,避免不必要的扩容开销。

2025-03-19 20:28:08 179

原创 Integer缓存池

在Java开发中,Integer是一个常用的包装类,但在使用==进行比较时,可能会遇到一些出人意料的结果。这是因为Java在一定范围内对Integer对象进行了缓存优化,即所谓的Integer缓存池。本文将通过代码示例、源码解析以及方法的剖析,详细探讨Integer缓存池的工作原理,并分析其对性能优化的作用。Integer缓存池会缓存-128到127之间的Integer值,对象并非每次都新建。方法会使用缓存池,尽量避免不必要的对象创建。如果需要比较Integer值是否相等,应尽量使用equals()

2025-03-19 20:09:04 253

原创 StringBuilder类的数据结构和扩容方式解读

String类是不可变的,每次拼接都会生成新的对象,导致内存开销和性能损耗,而StringBuilder则通过可变字符数组来动态修改字符串,避免了创建新对象的问题。的设计通过一个动态扩展的char[]数组来优化字符串拼接过程,避免了String的不可变性带来的性能瓶颈。通过合理的初始化容量和扩容机制,StringBuilder可以在保证性能的同时灵活处理字符串操作。

2025-02-27 20:23:25 286

原创 String类的equals()的作用和源代码解读

简介:为什么equals()方法在Java中如此重要,尤其是对于String类。equals()与==的区别,常见的理解偏差。==用于比较对象的引用是否相同,即是否指向同一内存地址。equals()用于比较对象的内容是否相同,需要类中重写equals()方法来定义比较逻辑。

2025-02-26 18:19:29 213

原创 String为什么是不可变的?

为什么String是不可变的?1.字符串内部使用一个字符数组来作为数据结构,保存字符串的所有字符。2.字符数组被final关键字修饰,所以该数组一旦被创建,就无法再为其重新分配内存空间。3.每个修改字符串的方法,都会将新的修改内容保存到一个新的字符串对象中,并不会修改原字符串的内容。例如上面举例的replace()方法substring()方法。

2025-01-20 19:37:23 414

原创 MongoDB服务被360删掉了怎么办?

D盘内存空间突然变得很小,怀疑中病毒了,灵机一动看向了右下角的360······经过一连串操作,重启后确实恢复了,但是在今天打开navicat时发现连接不上mongodb了晕但是我是另外一种问题,。

2024-10-15 21:30:51 451 1

空空如也

空空如也

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

TA关注的人

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