當多個執行緒同時共享同乙個全域性變數或靜態變數,做寫的操作時,可能會發生資料衝突問題,也就是執行緒安全問題。但是做讀操作是不會發生資料衝突問題。
舉例:兩個視窗同時售賣100張火車票。
解決方法:
使用多執行緒之間同步或使用鎖(lock)。
原理:
將可能會發生資料衝突問題(執行緒不安全問題),只能讓當前乙個執行緒進行執行。**執行完成後釋放鎖,讓後才能讓其他執行緒進行執行。這樣的話就可以解決執行緒不安全問題。
什麼是多執行緒同步?
當多個執行緒共享同乙個資源,不會受到其他執行緒的干擾。
同步函式使用的是this鎖
1、同步**塊:
就是將可能會發生執行緒安全問題的**,給包括起來。只能讓當前乙個執行緒進行執行,被包裹的**執行完成之後才能釋放所,然後才能讓其他執行緒進行執行。
synchronized(同乙個資料)
2、同步函式:
在方法上修飾synchronized 稱為同步函式
publicsynchronizedvoid test(){}
3、靜態同步函式:
方法上加上static關鍵字,使用synchronized 關鍵字修飾 為靜態同步函式
synchronized(類名.class)
靜態的同步函式使用的鎖是該函式所屬位元組碼檔案物件,可以用 getclass方法獲取,也可以用當前類名.class 表示。
4.同步**塊、同步函式、靜態同步函式的區別?
同步**使用自定鎖(明鎖),同步函式使用this鎖,靜態同步函式使用位元組碼檔案,也就是類.class
1、什麼是多執行緒死鎖?
同步中巢狀同步,導致鎖無法釋放
解決辦法:
同步中盡量不要巢狀同步
C 知識點 執行緒2 執行緒管理
執行緒管理就是使用join或detach來管理執行緒。第乙個版本,注意在異常中增加對執行緒的join include include using namespace std void function 1 std cout第二個版本,包一層 include include using namespa...
多執行緒知識點整理
基本概念 多執行緒程式在較低的層次上擴充套件了多工的概念 乙個程式同時執行多個任務,通常,每乙個任務稱為乙個執行緒,它是執行緒控制的簡稱。可以同時執行乙個以上執行緒的程式稱為多執行緒程式。多程序與多執行緒的區別 每個程序擁有自己的一整套變數,而執行緒則共享資料。相關介面 執行緒的狀態 要獲得乙個執行...
多執行緒之知識點
多執行緒的學習 1.都不是原子操作,在多執行緒中值可能被改變 因此在多執行緒環境中對乙個變數進行讀寫時,我們需要有一種方法能夠保證對乙個值的遞增操作是原子操作 即不可打斷性,乙個執行緒在執行原子操作時,其它執行緒必須等待它完成之後才能開始執行該原子操作。這種涉及到硬體的操作會不會很複雜了,幸運的是,...