在静态方法中使用 .lock() 加锁并且给 int 做++操作,可能出现重复值的原因是多个线程同时访问该静态方法,并且同时执行 lock() 加锁和++操作。

要解决这个问题,可以使用 synchronized 关键字或者 AtomicInteger 类来保证线程安全。

使用 synchronized 关键字:

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

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

使用 AtomicInteger 类:

import java.util.concurrent.atomic.AtomicInteger;

public class MyClass {
    private static AtomicInteger count = new AtomicInteger(0);

    public static void increment() {
        count.incrementAndGet();
    }
}

这样就可以保证多个线程同时访问静态方法时,对 int 值的操作是线程安全的,不会出现重复值。

Java 静态方法线程安全问题:ReentrantLock 锁失效及解决方法

原文地址: https://www.cveoy.top/t/topic/qDzY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录