自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM 之 String 引用机制解析:常量池、堆内存与 intern 方法

注意:在 JDK6 中,intern() 返回的始终是常量池中的对象,而不是堆中的新对象,因此结果为。JDK7+ 才有将堆对象放入常量池的可能。

2025-04-11 18:50:31 202

原创 JVM之String创建、拼接

【代码】JVM之String创建、拼接。

2025-04-11 15:03:39 318

原创 JVM之类的加载过程

这一阶段是将类的字节码从外部存储(如磁盘)加载到JVM的内存中。加载时,JVM会根据类的全限定名(包括包名和类名)查找相应的字节码文件(初始化阶段是类的静态代码块和静态变量的初始化过程。JVM会执行类中的静态初始化块()和静态字段的初始化操作。初始化是唯一会改变类的状态的阶段,它是类加载的最后一步。文件),并将其读入内存。

2025-03-25 16:26:04 356

原创 Java并发编程之Fork/Join

如果任务规模过大,则将其拆分成多个更小的子任务。这个拆分过程通常是递归的,直到子任务规模足够小,可以直接计算。由于采用了工作窃取算法,即使某些线程任务执行完毕,空闲的线程也可以“窃取”其他线程的子任务,进一步提高并行度。这样做会将两个子任务都异步提交给线程池,然后当前线程等待这两个任务执行完毕。每个子任务完成后,其结果会返回给父任务,父任务将这些子任务的结果进行合并,最终返回整个大任务的计算结果。每个任务返回其计算结果,父任务通过合并这些结果来得到整个数组的总和。将左边的子任务异步提交到线程池。

2025-03-20 16:51:00 363

原创 Java并发编程之CyclicBarrier

在创建时,需要指定参与线程的数量。还可以提供一个Runnable类型的屏障动作,当所有线程到达屏障时,该任务会被自动执行。每个线程在执行到需要同步的代码时,调用await()方法等待其他线程。当最后一个线程调用await()时,屏障打开,所有线程被同时释放,继续执行后续任务。(类似于中的,使计数器减1)在这个示例中,每个线程在到达屏障点后都会调用await(),当最后一个线程调用后,屏障打开,所有线程都同时继续执行。

2025-03-20 10:50:04 408

原创 Java并发编程之CountDownLatch

常见于主线程等待多个子线程完成各自的任务后,再进行汇总或后续处理。例如,启动多个任务加载数据,主线程在所有任务完成后开始处理数据。当前线程调用此方法后,会等待直到计数器归零。例如,所有线程等待一个“发令枪”信号后同时开始执行任务。每当一个任务完成时,调用此方法,将计数器减 1。一旦计数器为 0,所有等待的线程都会被释放。这个值通常代表需要等待完成的任务数或线程数。计数器归零后,主线程被唤醒,继续执行后续代码。的计数器只能使用一次,归零后不能重新设置。,否则等待的线程可能永远无法被唤醒。

2025-03-20 10:42:32 420

原创 Java并发编程之Semaphore信号量

Semaphore 常用于实现对有限资源的访问控制,通过许可的获取和释放来管理资源的并发访问。Semaphore 在构造时设定一个许可数量,这个数量表示可以同时访问共享资源的线程数。在这个例子中,Semaphore 被初始化为 3,因此最多允许 3 个线程同时访问。Semaphore 支持公平和非公平两种模式。时,它将会阻塞,直到其他线程调用。当第 4 个线程调用。

2025-03-19 17:36:20 293

原创 Java并发编程之StampedLock

每次获取锁(无论是读锁、写锁还是乐观读锁)时,都会返回一个 stamp,这个 stamp 内部编码了当前锁的状态(包括版本信息)。获得一个乐观读锁时,会返回一个 stamp。方法时,会返回一个 stamp,这个 stamp 表示一个“乐观”状态。方法获取写锁,返回一个 stamp,释放时需要传入这个 stamp。,表示期间有修改,读取的数据可能不一致,通常退化为读锁重新读取数据。方法获得读锁,同样返回一个 stamp,用于后续的释放操作。在进行乐观读时,先获取 stamp,然后执行读操作,最后使用。

2025-03-19 16:24:07 889

原创 Java并发编程之ReentrantReadWriteLock

多个线程可以同时持有读锁,只要没有线程持有写锁,这样可以允许并发读操作,从而提高系统并发性能。一次只有一个线程可以持有写锁,并且在写锁持有期间,其他线程无论是请求读锁还是写锁都会被阻塞。“独占内存”则意味着写操作必须保证独占访问,防止数据出现并发修改问题。“共享内存”指的是多个线程可以共享同一份数据的只读访问权限。方法,确保对共享资源的访问安全。在需要保护的代码块前后分别调用。方法获得读锁对象,使用。

2025-03-18 16:15:58 532

原创 Java并发编程之AQS

就是对 state 的显式设置,它保证只有一个线程能成功更新 state,从而获得锁。AQS 使用CAS操作来原子性地修改 state,从而保证并发场景下状态更新的安全性。AQS 内部通过一个。来记录当前同步状态。

2025-03-18 16:08:25 350

原创 Java并发编程之AQS原理

【代码】Java并发编程之AQS原理。

2025-03-17 21:03:24 244

原创 Java并发编程之newScheduledThreadPool

【代码】Java并发编程之newScheduledThreadPool。

2025-03-17 15:17:33 160

原创 Java并发编程之ThreadPool提交方法

【代码】Java并发编程之ThreadPool提交方法。

2025-03-16 18:37:42 140

原创 Java并发编程之ThreadPoolExecutor构造

表示没有核心线程,线程不会被长期保留。如果任务提交速度超过线程池处理速度,未处理的任务会存放在队列中。,表示只有一个核心线程。,表示线程数可以无限扩展。:空闲线程会在 60 秒后被回收。当线程池无法处理新任务时(队列已满且线程数已达到。,任务直接提交给线程。,表示空闲线程不会被回收。,表示空闲线程不会被回收。时间内没有任务执行,则该线程会被回收。:默认线程工厂,线程名称格式为。:默认线程工厂,线程名称格式为。:默认线程工厂,线程名称格式为。

2025-03-16 16:00:07 344

转载 自定义线程池

工作线程(内部类)

2025-03-15 17:39:08 17

原创 Java并发编程之LongAdder底层代码

的 CAS 竞争问题,采用。

2025-03-14 16:01:25 389

原创 Java并发编程之Atomic原子操作

无需将字段包装为原子类,适合优化已有代码。减少竞争,在高并发场景下性能显著优于。,避免对整个数组加锁。

2025-03-14 11:57:24 299

原创 Java并发编程之原子引用

【代码】Java并发编程之原子引用。

2025-03-13 16:27:03 343

原创 Java并发编程之CAS乐观锁与volatile

Java并发编程之CAS乐观锁与volatile

2025-03-13 12:13:44 182

原创 Java并发编程之synchronized有序性误区

许多开发者误以为能完全禁止指令重排序,而实际上它仅能保证线程间的操作顺序,禁用重排序需依赖volatile。

2025-03-12 16:42:25 776

原创 Java并发编程之有序性

有序性指程序执行的顺序与代码的先后顺序一致。但在实际执行中,为了提高性能,编译器和处理器可能会对指令进行重排序。

2025-03-11 17:29:38 402

原创 Java并发编程之ReentrantLock

在指定时间内尝试获取锁,超时后放弃。立即尝试获取锁,成功返回。

2025-03-10 20:45:03 468

原创 Java并发编程之Wait/Notify

通过wait()notify()wait():释放锁并等待条件满足。notify():通知等待线程条件已变化。正确使用这两个方法需严格遵循同步规则和条件检查,避免线程饥饿或死锁问题。拓展:wait与sleep1. 所属类与调用方式方法所属类调用方式wait()Object必须在同步块中调用(需持有对象锁)sleep()Thread静态方法,可直接调用(无需持有锁)2. 锁的释放行为方法是否释放锁?锁释放时机wait()✅释放锁调用wait()后立即释放锁,线程进入等待状态。

2025-03-07 19:28:34 676

原创 Java并发编程之锁膨胀

锁膨胀不可逆:一旦升级为重量级锁,不会降级(除非对象被回收后重新创建)。性能权衡轻量级锁:低开销(CAS + 自旋),适合低竞争场景。Monitor锁:高开销(涉及操作系统内核态切换),但避免CPU空转,适合高竞争场景。适应性自旋优化:JDK 6后JVM根据历史竞争情况动态调整自旋次数。

2025-03-07 15:09:01 492

原创 Java并发编程之锁重入

【代码】Java并发编程之锁重入。

2025-03-07 14:45:16 190

原创 Java并发编程之interrupt中断阻塞正常线程

场景中断行为阻塞状态抛出,清除中断标志,需通过异常处理响应中断。正常运行状态仅设置中断标志位(),需手动检查标志位并决定是否终止。

2025-03-04 15:46:27 243

原创 SpringCloud-GateWay整合eureka实现网关转发

学习springcloud时,教程使用的是zuul,搜了半天访问还是404,一气之下直接使用gateway(bushi,而且Netfilex也停止维护了。

2024-09-19 22:20:49 481 1

空空如也

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

TA关注的人

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