[英]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.