静态方法中变量的竞争条件

Lak*_*age 1 java static multithreading static-methods race-condition

我有一个方法如下:

public static void method() {

int i = 0;
i = i + 1;

}
Run Code Online (Sandbox Code Playgroud)

我在静态方法中有一个int变量.并且该方法由几个线程访问.
我的问题是:

  1. i变量是否符合竞争条件?
  2. 如果在Spring Web应用程序中访问该方法并由多个用户同时访问该怎么办?

Nat*_*hes 8

如果变量是在方法中声明的,那么它将存在于为方法的单个调用提供的堆栈帧中.只能通过调用该方法的线程访问堆栈帧.在发布的示例中没有竞争条件,方法的每次调用都获得自己的变量副本.你需要共享状态才能有竞争条件.

这些堆栈帧是执行递归方法时堆积的东西,占用堆栈空间直到某个时刻发生堆栈溢出错误,因为递归导致越来越多的堆栈帧被分配,而没有一个方法调用有机会完成(这将释放他们的堆栈空间).