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` 提供了更灵活和强大的锁机制, 推荐在复杂并发控制中使用
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。