Java锁升级 根据上面内容可以知道,synchronized 锁有四种状态:无锁、偏向锁、轻量级锁和重量级锁,下面介绍四种状态和其之间的转换。 无锁 当一个对象被创建之后,还没有线程进入,这个时候对象处于无锁状态,其 Mark Word 中的信息如上表所示。 偏向锁 当锁处于无锁状态时,有一个线程
Java静态代理和动态代理 代理模式 代理模式是常用的 Java 设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正
图解Java内存模型(JMM) 一、核心定义 Java 内存模型(Java Memory Model,JMM) 是 Java 虚拟机规范定义的并发编程规范。它抽象了线程和主内存之间的关系,规定了从 Java 源代码到 CPU 可执行指令的转化过程中需要遵守的并发原则和规范。 主要目的:简化多线程编程
ReentrantLock 与 synchronized 异同点对比 写在开头 ReentrantLock 是一种独占式的可重入锁,位于 java.util.concurrent.locks 中,是 Lock 接口的默认实现类,底部的同步特性基于 AQS 实现,和 synchronized 关键字类
synchronized 和 volatile 关键字的区别 概述 synchronized 和 volatile 都是 Java 中用于多线程同步的关键字,但它们在作用范围、实现原理、功能特性等方面有着本质的区别。 volatile:轻量级同步机制,主要用于保证变量在多线程之间的可见性。 sync
MyBatis 中 #{} 和 ${} 的区别详解 一、概述 在 MyBatis 中,#{} 和 ${} 都用于在 SQL 语句中引用参数,但它们在底层实现、安全性和使用场景上存在本质区别。 对比维度 #{} ${} 处理方式 预编译参数(PreparedStatement) 直接字符串替换 SQL
Java 跳出循环详解:break、continue 和 return 概述 在 Java 中,控制循环流程的关键字有三个:break、continue 和 return。它们的作用不同,适用的场景也不同。 关键字 作用 是否结束方法 break 结束整个当前循环,执行循环后面的语句
Java 使用阻塞队列实现生产者消费者模式 一、什么是生产者消费者模式? 生产者消费者模式是一种经典的多线程协作设计模式。它通过一个共享缓冲区(通常是一个队列)将"生产数据"和"消费数据"的线程解耦: 生产者线程
Java 中的阻塞队列(BlockingQueue)详解 一、什么是阻塞队列? 阻塞队列(BlockingQueue) 是一个支持两个附加操作的队列: 支持阻塞的插入:当队列满时,插入元素的线程会被阻塞,直到队列有空闲位置。 支持阻塞的移除:当队列空时,获取元素的线程会被阻塞,直到队列中有可用元素。
Java 中创建线程的四种方式详解 概述 在 Java 中,创建线程有多种方式。从 JDK 源码的角度,官方文档指出 “There are two ways to create a new thread of execution”(继承 Thread 类或实现 Runnable 接口),但从实际开发