簡體   English   中英

變量/標志是否會受到非同步方法上的另一個線程的影響?

[英]Do variables/flags can be affected by another thread on a non-synchronized method?

例如,我有一個這樣的非同步方法:

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行怎么辦?

您的flag是局部變量。 每個線程在堆棧上都有自己的副本。 他們根本不會互相干擾。 這只能在共享狀態(即堆上的內容,即對象的字段)下發生。

不行 其(布爾標志)是局部變量。 局部變量不在共享內存上。 它們是線程堆棧的本地/專用線程,因此不影響其他線程/處理器。

創建線程時,它將具有自己的堆棧。 每個線程將擁有自己的堆棧,並且一個線程永遠不會與其他線程共享其堆棧。 程序中定義的所有局部變量都將在堆棧中分配內存。 因此,答案是肯定的,您的flag變量將是線程安全的。

您的方法是線程安全的,因為它不適用於任何共享資源(例如靜態變量)。 您的標志是一個方法變量,每個線程都將擁有它的本地副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM