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关键字,将同步哪个对象?
当你说它不是线程安全的时,你的分析是正确的,因为操作不是原子的.检索值和增量不是线程安全的.对此方法的多次调用(无论是否具有参数)访问相同的非局部变量.
添加synchronized到此方法使其成为线程安全的.添加到static方法时,该Class对象是被锁定的对象.
以使它线程安全的替代方案是,以取代int用AtomicInteger,它有自己的原子getAndIncrement方法.