当前位置: 首页 > news >正文

java锁

学习顺序

→ synchronized
→ Lock
→ AQS
→ 分布式锁

1. 一句话记住 synchronized

加锁 = 排队。
同一时间,只有一个线程能进去执行。

解决的问题:
多线程同时改同一个数据 → 数据错乱、超卖、重复提交、计数不准。



2. 3 种最常用写法(背下来)

① 锁普通方法(最简单)

java
public synchronized void doSomething() {
// 同一时间只有一个线程能进这里
}

锁的是:当前对象 this

② 锁代码块(最推荐、性能最好)

java
synchronized (this) {
// 只有这段代码排队
}

工作 80% 场景用这个。
③ 锁静态方法(全局唯一)
java
public static synchronized void update() {
}
锁的是:当前类对象(全局唯一)

3. 3 个必须懂的特点(面试+工作都考)

1. 自动加锁、自动释放
代码走完/抛异常都会自动释放,不会忘释放。
2. 可重入
同一个线程,可以多次进同一个锁,不会卡死自己。
3. JDK 1.6 以后已经非常快
有偏向锁、轻量级锁、重量级锁自动升级,性能很高。



4. 最经典实战示例(直接复制到项目)

示例:安全计数

java
public class Counter {

private int count = 0;

// 加锁,保证线程安全
public synchronized void add() {
count++;
}

public int getCount() {
return count;
}
}




5. 你现在马上就能做的练习

打开你项目里任意一段:

- 更新数量
- 扣减库存
- 生成唯一编号
- 重复提交控制

包起来:

java
synchronized (this) {
// 你的业务代码
}


你只要写一次,你就真正入门锁了。



6. 最简单判断:什么时候要用?

- 多个请求同时进来
- 改同一个数据
- 可能出现:数据不对、重复、超卖


今天第二课:synchronized 核心进阶(必懂)

我用最简单、最直白的话讲。


1. 锁的到底是什么?(超级关键)

记住一句:
synchronized 锁的是「对象」,不是代码!

3 种情况你要一眼看懂

1. 锁方法
java
public synchronized void method() {}


锁的是:当前对象 this
2. 锁代码块
java
synchronized (obj) {}


锁的是:你括号里写的那个对象 obj
3. 锁 static 方法
java
public static synchronized void staticMethod() {}


锁的是:类对象(Xxx.class),全局唯一


2. 锁的作用范围(你必须分清)

- 同一个对象 才会互斥排队
- 不同对象,各锁各的,互不影响

举个最简单例子:

java
A a1 = new A();
A a2 = new A();

// a1 和 a2 是两个对象,它们的 synchronized 互不阻塞!


这是90% 新手用错锁的根源。


3. JDK 1.8 以后的锁升级(面试必问)

你只要记住这个流程,不用背细节:

1. 偏向锁
只有一个线程用,不加真正的锁,最快
2. 轻量级锁
两个线程抢,用自旋,不阻塞
3. 重量级锁
竞争激烈,才变成真正的阻塞锁

结论:
现在的 synchronized 一点都不慢,放心用。



4. 3 个关键特性(工作+面试必考)

1. 可重入
同一个线程,可以多次进同一个锁,不会卡死
2. 不可中断
一旦等锁,就得等人家释放
3. 非公平
谁抢到谁先执行,不是先来先服务



5. 最实用:什么时候用哪种?

- 简单方法、全局单例 → 锁方法
- 只需要锁一小段代码 → 锁代码块(推荐)
- 静态变量、全局计数 → static 锁



6. 最标准、最安全写法(直接复制)

java
public class TestService {

// 共享变量
private int num = 0;

public void addNum() {
// 只锁关键代码,性能最好
synchronized (this) {
num++;
// 你的业务:更新DB、缓存、计数...
}
}
}

你现在已经掌握:

- synchronized 3 种写法
- 锁的是对象
- 锁升级
- 可重入、可见性
- 实战安全写法

http://www.jsqmd.com/news/472968/

相关文章:

  • Python 面向对象之继承详细教程
  • 一站式同城信息小程序源码平台:招聘、房产、相亲、拼车全搞定
  • 金智维智能体如何赋能审计行业效率跃升?
  • IXYS艾赛斯 IXFH26N50P TO-247 场效应管
  • 交换机配置命令详解到一键生成脚本 —— 华为/思科/H3C/锐捷全品牌覆盖
  • 神器推荐!SQL 一键转 ER 图,免费在线、自动识别外键、高清导出
  • 别被“小龙虾”迷了眼!实测 OpenClaw 与实在Agent:谁才是企业降本增效的真大腿?
  • leetcode hot100——三数之和
  • AI 内容导出乱、格式崩、公式变?我开发了这只鸭子帮我全解决了
  • 位姿估计之PnP:3D-2D
  • 根据文章举报数量确定推荐
  • 苄基鸟嘌呤-降冰片烯,BG-Nor,成为模块化生物探针的理想载体
  • 新Java基础(二十):多态
  • esp网络时钟
  • 成功接入美股行情api与港股行情api同步获取
  • OpenClaw 如何运行 Claw 资源文件
  • OpenClaw狂飙:我们该担心的不只是“被取代”,而是如何与AI“共处”
  • 从 App 到 Agent:鸿蒙应用形态正在改变
  • 碎片学习|外贸tob sales有效动作takeaways
  • 电商品牌数字化获客工具排行榜适配精准需求
  • 2026合肥验光配镜机构推荐|学生党/宝妈闭眼冲,避坑不花冤枉钱 - 品牌测评鉴赏家
  • Java:Java快速入门
  • 从 0 到 1 搭建私有化体系,MonkeyCode 才是真・工程级底座
  • 【Elasticsearch】translog checkpoint ckp文件的写入
  • 【最新版】“C盘+系统清理软件”!集系统优化、垃圾清理、驱动更新、软件卸载功能!绿色免安装+安卓端
  • 深入理解计算机系统2.1信息的存储:扒掉数据的外衣
  • 蓝桥杯C++DAY3 基础算法
  • AI安全应用实战复盘:一场2小时的深度交流,我们聊了什么?
  • 2026年云渲染收费模式全解析|适配Blender/3DMAX/C4D/Maya/UE5全软件,附实操选型建议
  • NBA 2000-2020 赛季球员数据可视化分析项目书