变量/标志是否会受到非同步方法上的另一个线程的影响?

Jj *_*beo 0 java multithreading flow

例如,我有一个非同步的方法,如下所示:

public void nonSynchronized(){
     boolean flag = false;

     if(/*some condition*/){
          flag = true;
     }

     //more line of codes here


     if(flag == true){ 
          //do something here - let's say line 33.
     }

}
Run Code Online (Sandbox Code Playgroud)

如果第一个线程执行该方法然后设置flagtrue,并且在执行第33行之前另一个线程执行该方法然后将该变量重置flagfalse,第一个线程是否仍然执行第33行,该怎么办?

Thi*_*ilo 5

flag是一个局部变量.每个线程在堆栈上获得自己的副本.它们根本不会干扰彼此.这只能发生在共享状态,即堆上的东西,即对象的字段.

  • 是的,参数本质上也是局部变量,它们也存在于堆栈中.当然,如果参数是对象,则该对象内的数据位于共享堆上. (2认同)