温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Synchronized是什么

发布时间:2026-09-15 16:23:38 来源:亿速云 阅读:88 作者:小樊 栏目:编程语言

在 Java 中,synchronized关键字(keyword),用于实现线程同步,保证在多线程环境下对共享资源的安全访问,避免数据不一致问题。


一、synchronized 是什么?

synchronizedJava 内置的锁机制,用来:

  • 保证同一时间只有一个线程执行某段代码
  • 保证可见性(一个线程修改后,其他线程能看到)
  • 保证原子性(操作不可被中断)

它是 悲观锁可重入锁非公平锁


二、为什么要用 synchronized

多线程问题示例

class Counter {
    int count = 0;
    void add() {
        count++;
    }
}

多个线程同时调用 add(),可能导致 count 结果错误。

原因:count++ 不是原子操作。


三、synchronized 的三种用法

1️⃣ 修饰实例方法(锁当前对象 this

public synchronized void method() {
    // 同一对象,同一时间只能一个线程执行
}

✅ 锁的是:当前实例对象


2️⃣ 修饰静态方法(锁类对象)

public static synchronized void method() {
    // 所有线程共享一把锁
}

✅ 锁的是:类的 Class 对象(如 Counter.class)


3️⃣ 修饰代码块(锁指定对象)

Object lock = new Object();

public void method() {
    synchronized (lock) {
        // 只锁这段代码
    }
}

✅ 锁的是:括号里的对象


四、synchronized 保证什么?

特性 说明
原子性 同一时间只有一个线程执行
可见性 修改后立刻对其他线程可见
有序性 一定程度防止指令重排

五、可重入性(重要)

同一个线程可以多次获取同一把锁:

synchronized void a() {
    b();
}
synchronized void b() {}

✅ 不会死锁


六、synchronizedLock 的区别

对比项 synchronized Lock
使用方式 关键字 接口
自动释放 ❌(需手动)
可中断
公平锁
性能 JDK 优化后很好 更灵活

七、底层原理(简单了解)

  • 基于 对象头(Mark Word)
  • 依赖 Monitor(监视器锁)
  • JDK 1.6 后引入:
    • 偏向锁
    • 轻量级锁
    • 重量级锁

八、总结一句话

synchronized 是 Java 用来保证多线程安全的同步锁,最简单的并发控制方式。

如果你愿意,我可以:

  • 图解 说明锁的过程
  • 对比 synchronized vs volatile
  • 死锁示例与避免方法
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI