温馨提示×

温馨提示×

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

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

java Synchronized 是什么

发布时间:2026-10-06 09:07:48 来源:亿速云 阅读:94 作者:小樊 栏目:编程语言

在 Java 中,synchronized 是一种线程同步机制,用来保证在多线程环境下,某一段代码或某个对象在同一时间只能被一个线程访问,从而避免线程安全问题(如数据不一致、竞态条件)。


一、synchronized 的作用

  • 原子性:保证同一时刻只有一个线程执行被 synchronized 保护的代码
  • 可见性:一个线程对共享变量的修改,对其他线程立即可见
  • 有序性:阻止指令重排对同步代码的影响

二、synchronized 的三种使用方式

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

public synchronized void method() {
    // 同一时刻只能有一个线程访问该对象的此方法
}
  • 锁对象:this
  • 不同对象之间不互斥

2️⃣ 修饰静态方法(锁的是 Class 对象)

public static synchronized void method() {
    // 锁的是当前类的 Class 对象
}
  • 锁对象:类名.class
  • 所有线程共享同一把锁

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

public void method() {
    synchronized (this) {
        // 只同步这段代码
    }
}

或:

private static final Object lock = new Object();

public void method() {
    synchronized (lock) {
        // 自定义锁对象
    }
}

✅ 推荐使用代码块,控制粒度更细,性能更好


三、简单示例(线程安全)

public class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }

    public int getCount() {
        return count;
    }
}

如果不加 synchronized,多线程下 count++ 可能出错。


四、synchronized 的底层原理(简述)

  • 基于 对象头中的 Monitor(监视器锁)
  • 线程进入 synchronized 会尝试获取锁
  • 获取不到会阻塞(重量级锁)
  • JDK 1.6 后做了优化:
    • 偏向锁
    • 轻量级锁
    • 自旋锁
    • 锁升级机制

五、synchronized vs Lock

对比项 synchronized Lock
使用难度 简单 较复杂
是否自动释放 ✅ ❌(需手动 unlock)
可中断 ❌ ✅
公平锁 ❌ ✅
性能 已优化,接近 Lock 更灵活

六、总结一句话

synchronized 是 Java 内置的线程同步关键字,用来保证多线程下代码的安全执行。

如果你愿意,我也可以讲:

  • synchronized 锁升级过程
  • 和 volatile 的区别
  • 实际项目中的使用建议
向AI问一下细节

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

AI
助
手