鸿蒙Next中synchronized关键字如何使用

在鸿蒙Next开发中,synchronized关键字的具体用法是怎样的?它与Java中的实现有什么区别?能否提供一个在多线程场景下的使用示例?需要注意哪些同步细节?

2 回复

鸿蒙Next里synchronized还是老规矩:锁对象或代码块,防多线程打架。
用法示例:

synchronized(this) {
    // 你的危险操作
}

或者锁方法:

public synchronized void 危险方法() { }

注意别锁太狠,不然性能会哭的!😭

更多关于鸿蒙Next中synchronized关键字如何使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,synchronized 关键字用于实现线程同步,确保多线程环境下代码块的原子性。其用法与Java类似,可以修饰方法或代码块,防止多个线程同时访问共享资源。

基本语法

  1. 修饰实例方法
    锁定当前对象实例:

    public synchronized void method() {
        // 同步代码
    }
    
  2. 修饰静态方法
    锁定当前类的Class对象:

    public static synchronized void staticMethod() {
        // 同步代码
    }
    
  3. 修饰代码块
    指定锁对象(可以是任意对象):

    public void blockMethod() {
        synchronized (lockObject) {
            // 同步代码块
        }
    }
    

示例代码

public class Counter {
    private int count = 0;
    private final Object lock = new Object();

    // 1. 同步实例方法
    public synchronized void increment() {
        count++;
    }

    // 2. 同步代码块
    public void decrement() {
        synchronized (lock) {
            count--;
        }
    }

    // 3. 同步静态方法
    public static synchronized void log() {
        System.out.println("Static synchronized method");
    }
}

注意事项

  1. 锁对象选择

    • 实例方法锁是当前对象(this),静态方法锁是类对象(Class)。
    • 代码块中建议使用私有final对象(如private final Object lock),避免外部篡改。
  2. 性能影响
    同步会降低并发效率,尽量减小同步范围(优先使用代码块而非整个方法)。

  3. 死锁风险
    避免嵌套锁定多个资源,确保锁顺序一致。

替代方案

鸿蒙Next也支持java.util.concurrent包中的锁机制(如ReentrantLock),在复杂场景下更灵活。

通过合理使用synchronized,可有效保障线程安全,避免数据竞争问题。

回到顶部