- 博客(15)
- 收藏
- 关注
原创 volatile的功能以及应用解释
Double-Checked Locking (DCL) 是一种常见的多线程编程模式,用于减少同步开销,但它在某些语言和环境中存在潜在问题。这种设计既保证了线程安全,又最大限度地减少了同步带来的性能影响,是多线程环境下实现高效单例模式的经典解决方案。当类首次被主动引用(如访问静态字段、调用静态方法)时,JVM 会执行类的初始化,自动生成一个名为。JVM 在类加载阶段(如初始化静态变量)的线程安全性是由。的修改能立即对其他线程可见,而不是缓存在线程本地内存中。:依赖类加载的线程安全(如问题中的示例)。
2025-08-05 19:11:58
816
原创 CAP理论以及原子类详解
无锁编程通过避免线程阻塞和减少上下文切换提升效率,但需权衡CPU资源消耗。实际开发中应根据场景选择(如无锁 vs加锁)。原理:CAS+自旋场景:低并发下的全局计算,AtomicLong能保证并发情况下计数的准确性,内部使用CAS来解决并发安全问题缺陷:高并发后性能急剧下降,N个线程CAS操作修改线程的值,每次只有一个成功,其它N-1失败,失败的不停的自旋直到成功,这样大量失败自旋的情况,很浪费CPU资源。
2025-08-05 18:58:25
1187
原创 常量池和运行时常量池的详解
在 Java 中,和是 JVM 内存结构中的重要概念,主要用于存储编译期生成的字面量和符号引用。"Hello"123final使用intern()
2025-07-24 18:49:05
932
原创 final关键字的详细解释
final是 Java 的关键字,用于声明不可修改的类、方法或变量。修饰变量时表示值/引用不可变,必须初始化;修饰方法时禁止子类重写;修饰类时禁止继承。final能确保线程安全,帮助优化性能,并用于设计不可变类(如String)。与finally和finalize()不同,final着重于不可变性,常用于定义常量、保护核心逻辑和工具类设计。
2025-07-24 18:38:19
311
原创 关于java各个内部类的详细解释
摘要: static 是 Java 的关键字,用于修饰变量、方法、代码块和内部类,使其属于类而非实例。静态变量被所有对象共享,类加载时初始化;静态方法可直接调用,但无法访问非静态成员或使用 this。静态代码块在类加载时执行一次,适合初始化操作;静态内部类不依赖外部类实例。注意事项包括:静态变量需考虑线程安全(如用 synchronized 或原子类),避免内存泄漏,以及防止滥用导致的代码维护问题。典型应用场景包括全局计数器、工具类方法和常量定义。
2025-07-24 18:32:31
311
原创 static关键字详解
摘要: static 是 Java 的关键字,用于修饰变量、方法、代码块和内部类,使其属于类而非实例。静态变量被所有对象共享,类加载时初始化;静态方法可直接调用,但无法访问非静态成员或使用 this。静态代码块在类加载时执行一次,适合初始化操作;静态内部类不依赖外部类实例。注意事项包括:静态变量需考虑线程安全(如用 synchronized 或原子类),避免内存泄漏,以及防止滥用导致的代码维护问题。典型应用场景包括全局计数器、工具类方法和常量定义。
2025-07-24 18:30:19
424
原创 volatile 关键字在 Java 中的含义与作用
Java中volatile关键字用于多线程环境,主要解决内存可见性和指令重排序问题。它强制线程从主内存读取变量最新值并立即写回修改,但不保证复合操作(如i++)的原子性。相比synchronized,volatile是更轻量级的解决方案,适用于单变量可见性控制,而synchronized能提供更全面的线程安全保障。
2025-07-24 18:28:12
495
原创 复刻黑马学成在线笔记(持续更新中。。。)
完整的看完了黑马的学成在线项目,决定独立复刻一遍,这里是黑马官方的在线文档学习文档所以这里不过多赘述代码,主要是记录一下学习中的知识点以及遇到的问题。
2025-06-13 18:35:26
118
原创 如何解决跨域问题
在浏览器通过地址访问前端工程。提示:从访问被CORS policy阻止,因为没有Access-Control-Allow-Origin 头信息。CORS全称是 cross origin resource share 表示跨域资源共享。出这个提示的原因是基于浏览器的同源策略,去判断是否跨域请求,同源策略是浏览器的一种安全机制,从一个地址请求另一个地址,如果协议、主机、端口三者全部一致则不属于跨域,否则有一个不一致就是跨域请求。比如:从到由于端口不同,是跨域。从到由于主机不同,是跨域。从到。
2025-05-20 21:54:36
1611
原创 采用xxl-job任务调度方案使用FFmpeg处理视频转码业务时的
解决方案:借助分布式锁,让多台计算机的所有线程去抢同一把锁,保证同一个视频只有一个执行器去处理。这里基于数据库实现分布式锁,多个线程同时去更新相同记录,哪个线程更新成功就代表哪个线程抢到锁(乐观锁)。这里可以给视频设置状态字段,视频处理完后更新status字段值,执行器执行任务前会判断视频处理状态。解决方案:调度过期策略,调度过期后忽略过期任务,从当前时间重新计算下次触发时间。解决方案:每个执行器收到广播任务有两个参数,分片总数,分片序号,根据任务id模上分片总数,如果等于分片序号,则执行此任务。
2025-05-09 11:13:08
189
原创 黑马学成在线笔记(上传图片时的Service事务优化)
现在在addMediaFilesToDb方法上添加@Transactional注解,也不会进行事务控制是因为并不是通过代理对象执行的addMediaFilesToDb方法。目前是在uploadFile方法上添加@Transactional,当调用uploadFile方法前会开启数据库事务,如果上传文件过程时间较长那么数据库的事务持续时间就会变长,这样数据库链接释放就慢,最终导致数据库链接不够用。所以判断该方法是否可以事务控制必须保证是通过代理对象调用此方法,且此方法上添加了。很遗憾,事务控制失败。
2025-05-03 17:30:52
1092
原创 SpringMVC中,GET和POST请求的区别
很多人搞不懂什么时候用get请求,什么时候用post请求,包括我也是,经常分不清,今天这篇文章将仔细分析一下这两者的区别目录
2025-04-25 10:26:41
429
原创 Linux出现error:“Cannot allocate memory”如何解决
我的当时是这样可以看出:系统未配置 Swap,导致内存不足时直接触发 OOM(Out of Memory),因此要启动swap。
2025-03-30 17:12:34
1672
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅