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

时间:2013-07-15 10:45:10

标签: 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.
     }

}

如果第一个线程执行该方法然后将flag设置为true,并且在执行第33行之前,另一个线程执行方法然后将变量flag重置为false,第一个线程是否仍会执行第33行?

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

即可。它的(布尔标志)是一个局部变量。局部变量不在共享内存上。他们 是线程堆栈的本地/私有,因此不会影响其他线程/处理器。

答案 2 :(得分:2)

创建线程时,它将拥有自己的堆栈。每个线程都有自己的堆栈,一个线程永远不会与其他线程共享其堆栈。程序中定义的所有局部变量都将在堆栈中分配内存。因此答案是您的flag变量将是线程安全的。

答案 3 :(得分:0)

您的方法是线程安全的,因为它不能处理任何共享资源,例如静态变量。您的标志是一个方法变量,每个线程都有一个本地副本。