静态方法没有任何参数线程安全吗?

Rya*_*yan 0 java multithreading

我有一个计数器和多个线程访问该getCount方法.代码如下:

public class ThreadSafeMethod {

        public static int counter = 0;

        public static int getCount() {
            return counter++;
        }
    }
Run Code Online (Sandbox Code Playgroud)

方法线程安全吗?我的理解是,因为counter++不是自动的,所以不安全.那怎么安全呢?如果我们添加synchronized关键字,将同步哪个对象?

rge*_*man 5

当你说它不是线程安全的时,你的分析是正确的,因为操作不是原子的.检索值和增量不是线程安全的.对此方法的多次调用(无论是否具有参数)访问相同的非局部变量.

添加synchronized到此方法使其成为线程安全的.添加到static方法时,该Class对象是被锁定的对象.

以使它线程安全的替代方案是,以取代intAtomicInteger,它有自己的原子getAndIncrement方法.