java之synchronized关键字简介
下文笔者讲述synchronized关键字简介说明,如下所示
synchronized关键字简介
`synchronized`是Java中用于实现线程同步的关键字
synchronized关键字的作用
用于控制多线程环境下对共享资源的访问
确保线程安全
使用`synchronized`
可以防止多个线程同时执行某个代码块或方法,从而避免数据不一致、竞态条件等问题。
synchronized可修改的对象
1.修饰实例方法
- 锁住的是当前对象(`this`),同一时刻只有一个线程可以执行该方法。
- 例
public synchronized void method() {
// 同步代码
}
2.修饰静态方法
- 锁住的是当前类的 Class 对象(如 `MyClass.class`),适用于所有实例共享的资源。
- 例
public static synchronized void staticMethod() {
// 同步代码
}
3.修饰代码块
- 可以指定锁的对象,灵活性更高。
- 例
public void method() {
synchronized (this) {
// 同步代码块
}
}
synchronized特点
- 可重入性同一个线程可以多次获得同一把锁
- 自动释放锁当线程执行完同步代码块或方法后
JVM 自动释放锁;若发生异常,也会释放锁。
- 阻塞等待其他线程在锁被占用时会进入阻塞状态,直到锁被释放。
synchronized底层原理
`synchronized` 是基于 JVM 的监视器锁(Monitor)机制实现的 - 每个 Java 对象都与一个 Monitor 关联; - 执行 `monitorenter` 指令尝试获取锁(进入 Monitor); - 执行 `monitorexit` 指令释放锁(退出 Monitor)。
synchronized性能优化(JDK 6+)
JVM 对 `synchronized` 做了多项优化 如: - 偏向锁无竞争时直接访问对象,无需同步 - 轻量级锁适用于线程交替执行同步块的情况 - 重量级锁线程进入阻塞状态,开销较大
synchronized注意事项
- 避免死锁多个线程交叉加锁可能导致死锁。
- 控制同步粒度尽量缩小同步代码块范围,提升并发性能。
- 不适合高并发场景`ReentrantLock` 提供了更灵活和强大的锁机制,
推荐在复杂并发控制中使用
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


