Java 静态方法线程安全问题:ReentrantLock 锁失效及解决方法
在静态方法中使用 .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 值的操作是线程安全的,不会出现重复值。
原文地址: https://www.cveoy.top/t/topic/qDzY 著作权归作者所有。请勿转载和采集!