多執行緒中的執行緒安全問題

2021-09-29 18:20:09 字數 1259 閱讀 2332

問題描述

某段**在沒有執行完成的時候,cpu就可能被其他執行緒搶走,結果導致當前**中的一些資料發生錯誤

原因:沒***某段**的執行的完整性、原子性

希望:這段**要麼全都執行,要麼全都沒有執行

前面模擬售票的都是執行緒安全問題

同步**塊:

使用一種格式,達到讓某段**執行的時候,cpu不要切換到影響當前**的**上去

這種格式,可以確保cpu在執行a執行緒的時候,不會切換到影響a執行緒執行的其他執行緒上去

使用格式

synchronized (鎖物件)

}class salewindow extends thread

public void run() catch (interruptedexception e)

/*cpu想去執行同步**塊的時候,需要先獲取鎖物件,獲取到鎖物件之後才可以執行同步**塊

* 當cpu*/

synchronized (obj) else

}}

//}}

}//火車站售票案例(加同步**塊),用的匿名內部類

public class demo06thread catch (interruptedexception e)

}else }}

}},"視窗一********");

thread t2 = new thread(new runnable() catch (interruptedexception e)

}else }}

}},"視窗二***------");

thread t3 = new thread(new runnable() catch (interruptedexception e)

}else }}

}},"視窗三-------");

t1.start();

t2.start();

t3.start();

}}死鎖:

a執行緒需要甲資源,同時擁的乙資源;b執行緒需要乙資源,同時擁有甲資源;兩條執行緒都不肯釋放自己擁的資源 ,同時也需要其它的資源時,就都無法進行執行,形成「死鎖」現象。

public class demo04 }}

}};

thread t2 = new thread("李四") }}

}};

t1.start();

t2.start();

}}

多執行緒(多執行緒的安全問題)

多執行緒的執行出現安全問題。非常可怕的問題,一出問題比較惱火 問題原因 重點 當多條語句在操作同乙個執行緒共享資料時,乙個執行緒對多條語句只執行了一部分,還沒執行完,另乙個執行緒參與進來執行。導致共享資料的錯誤。解決方法 對多條操作共享資料的語句,只能讓乙個執行緒都執行完,在執行過程中,其他執行緒不...

多執行緒安全問題

這裡的安全問題可以理解為 實現在邏輯上的問題,比如 火車站賣票 100張票讓4個人去賣,一定不能出現賣的票是負數問題,那麼開啟多執行緒後,如何才能保證賣的票不可能存在負數呢?常用的解決方法有兩種 1,使用同步 塊,把需要同步的 再放同步 塊中 2,使用同步函式 同步的鎖,可以理解為就是那個物件!同步...

多執行緒二 多執行緒安全問題

當多個執行緒共享同乙個全域性或者靜態變數,做寫的操作,可能會發生資料衝突問題,也就是執行緒安全問題。讀操作和區域性變數是不會發生的。二 執行緒安全的解決方法 該資源只能讓當前執行緒操作,操作完成之後,再讓其他執行緒執行 多執行緒之間同步 synchronized 使用鎖 lock 語法 synchr...