關於對多執行緒的認識總結

2021-06-21 06:05:55 字數 1248 閱讀 7572

學習執行緒後覺得不是那麼好理解,特別是對多執行緒的理解。

賣票程式:運用執行緒的知識建立乙個實現火車站賣火車票的類,注意在該類中不能出現多次賣同一張票,

或者某一張票沒賣的情況。

現在我們來理解這個題目,假設有100張票,賣一張少一張,大致的可以這樣理解

if(票數大於零)  第一行

單執行緒我們就不說了,不存在搶占執行的說法。如果是多執行緒呢?假設現在又a、b、c這三個視窗賣票,

也就是3個執行緒。現在a發現票數大於零,執行,剛執行完第三行,b發現票數大於零,執行,沒執行完,

然後c又發現票數大於零,執行……這時候出現了什麼結果?一票多賣!怎麼解決這個問題呢?這就要

用到同步的知識點。

當時我看到這道題的時候我也很困惑,也不知道怎麼理解。為什麼會出現一票多賣,某一張沒賣?覺得,

程式執行不都是一條一條的從前往後

的執行嗎?搶占的概念一出現,不大理解,就不懂它為什麼會搶占。

後來在經過問在加上自己的理解,理解到:執行緒的執行權通過搶占的方式獲得。乙個程式執行到一半時

突然被另乙個執行緒搶占了執行權,此時這個執行緒資料處理了一半,而另乙個執行緒也在處理這個資料,那

麼就會出現重複運算元據的現象,最終整個系統將會混亂。如果想要解決這個問題,就得用到同步。

不是說什麼都需要同步,只需要找到最關鍵的步驟就可以,就像賣票,只要控制好票數,和賣一張減一張

就可以了。

同步塊(synchronized)

格式:synchronized(類物件名a)

功能:synchronized(類物件名a)的含義是:判斷a是否已被其他執行緒霸佔,如果發現已經被其他執行緒霸佔

則當前執行緒陷入等待中,如果發現a沒有被其他執行緒霸佔,則當前執行緒霸佔住a物件,並執行同步**

塊,在當前執行緒執行同步**塊時,其他執行緒將無法再執行同步**塊(因為當前執行緒已經霸佔(鎖定)

了a物件),當前執行緒執行完同步**塊**後,會主動釋放對a物件的霸佔,此時再和其他執行緒相互

競爭對a的霸佔,最終

cpu會選擇其中的某乙個執行緒執行……

最終導致的結果是:乙個執行緒正在操作某資源的時候,將不允許其他執行緒操作該資源,即一次只允許乙個線

程處理該資源。

class a implements runnable 

else

}} }

}public class testtickets

}

這樣就能解決一票多賣和有票沒賣的問題了。

多執行緒學習總結(一) 認識多執行緒

而唯一看到的多執行緒 也是再專案中看到了別人寫的多執行緒 那時想要寫乙個和多執行緒相關的 基本是一模一樣的仿照著寫,出了一點問題也搞不懂問題在 所以就一直迷迷糊糊了一段時間,後來感覺有必要把這塊搞懂,就自己慢慢的找資料學習了。廢話就講這麼多,其實要學習多執行緒相關的,首先要搞清楚乙個概念,什麼是執行...

對python 多執行緒thread的認識

對python 多執行緒thread的認識 標題 class doutulaspider threading.thread headers def init self,args,kwargs self.page que queue 10 self.img que queue 20 defrun se...

個人對多執行緒的總結

程序和執行緒 1 程序是靜態的,其實就是指開啟的乙個程式 而執行緒是動態的,是真正執行的單元,執行的過程。其實我們平時看到的程序,是執行緒在執行著,因為執行緒是作為程序的乙個單元存在的。2 同樣作為基本的執行單元,執行緒是劃分得比程序更小的執行單位。3 每個程序都有一段專用的記憶體區域。與此相反,執...