如果你的**在程序中有多個執行緒同時執行一段**,如果每次執行的結果都和單執行緒執行時的結果一致, 那麼就是執行緒安全的
先看下面兩段**,執行結果是否一樣?
int num1 =0;
int num2 =0;
for(
int i =
0; i <
1000
; i++
)for
(int i =
0; i <
1000
; i++))
;}console.
writeline
(num1)
;console.
writeline
(num2)
;
分析:
1 第乙個for迴圈是單執行緒,每次執行的結果都是1000
2 第二個for迴圈是多執行緒,每次執行的結果不固定,原因是起了1000個執行緒,這些執行緒的呼叫順序不是安裝建立的順序來執行的,是作業系統根據當前的系統情況來排程的,因此沒辦法保證乙個固定的結果。那麼此時就是執行緒不安全的。
1.不能lock值型別,編譯器會直接報錯
那麼如何實現執行緒安全呢?
private
static
readonly
object obj=
newobject()
;static
void
main
(string
args));
}}console.
writeline
(num2)
;//1000
}
注意:
鎖物件不能為null
鎖string會衝突
鎖this也會衝突
推薦使用new乙個static readonly的object
執行緒安全問題
執行緒安全問題導致的原因 當多條語句在操作同乙個執行緒共享資料時,乙個執行緒對多條語句只執行了一部分,還沒有徹底執行完畢,此時另乙個執行緒參與進來執行,導致共享資料的錯誤。執行緒安全解決辦法 對多條操作共享的語句,每次只能讓乙個執行緒執行完成。在執行的過程中,其他執行緒不可以參與執行。解決方案 同步...
執行緒安全問題
是指 在多個執行緒進行的情況下對全域性變數或靜態變數進行寫的操作的時候出現的資料上的問題,就是執行緒安全的問題,在讀的時候不會出現執行緒的問題 即 public void run catch interruptedexception e synchronized this 即 package com...
執行緒安全問題
由於cpu輪流切換執行緒導致某執行緒沒來的及執行完,執行緒的共享變數便直接被其他執行緒所修改。package 執行緒安全問題 public class mainclass2 class ticket extends threadcatch interruptedexception e system....