多執行緒安全,為什麼會發生?

2021-09-29 02:08:29 字數 792 閱讀 4132

是否有多執行緒環境;

是否有共享資料;

是有存在多條語句操作這個共享資料;

當這三個條件同時存在的時候,猜可能發生多執行緒安全問題。

我用多執行緒中資料輸出重複問題來說明:

public

class

student

implements

runnable

catch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

+"-----"

+i--);

//**i-- 是對共享資料的操作(滿足條件3)**

}//解釋一下:因為每個執行緒是要獲得執行權,也就是獲得cup

//的時間片後才能被執行,假設它獲得了時間片後開始執行,但

//未執行完結果時間片(假設時間片為50ms)就用完了,那麼

//下乙個物件執行緒可能獲得了執行權。

//假設t1執行緒先進來了,假設此時i=5,執行緒走到了i--這

//塊,按照5輸出後,正準備進行i=i-1操作時,結果時間片用

//完了,所以t1失去了執行權,

}//就在這時,t2獲得執行權後進來了,此時i值還是5,所以數

//值5會出現兩次。}}

public

class

test

}

為什麼要用多執行緒

以前我認為多執行緒的作用就是提公升效能。實際上,多執行緒並不一定能提公升效能 甚至還會降低效能 多執行緒也不只是為了提公升效能。多執行緒主要有以下的應用場景 1 避免阻塞 非同步呼叫 單個執行緒中的程式,是順序執行的。如果前面的操作發生了阻塞,那麼就會影響到後面的操作。這時候可以採用多執行緒,我感覺...

為什麼要用多執行緒

1 避免阻塞 非同步呼叫 2 避免cpu空轉 需要處理的資訊提供得太慢,導致 cpu 效能沒有充分利用,這個時候多程序能充分利用 cpu 在io程式設計一節中,我們已經知道,cpu的速度遠遠快於磁碟 網路等io。在乙個執行緒中,cpu執行 的速度極快,然而,一旦遇到io操作,如讀寫檔案 傳送網路資料...

為什麼使用多執行緒

1 耗時的操作使用執行緒,提高應用程式響應 2 並行操作時使用執行緒,如c s架構的伺服器端併發執行緒響應使用者的請求。3 多cpu系統中,使用執行緒提高cpu利用率 4 改善程式結構。乙個既長又複雜的程序可以考慮分為多個執行緒,成為幾個獨立或半獨 立的執行部分,這樣的程式會利於理解和修改。使用多執...