執行緒基礎學習

2022-02-17 00:28:58 字數 1558 閱讀 7605

一、執行緒與程序的關係  

乙個應用程式可以存在多個程序例項,而乙個程序實列內部又可以同時包含多個執行緒. 從理論上講,執行緒是程序內的單個執行單元,它是windows作業系統為cpu工作分配的乙個最小單位.      執行緒主要由資料結構、堆疊和cpu暫存器組成.每乙個執行緒都可以在它的程序中單獨執行,並 儲存自已的堆疊和暫存器的值。     執行緒的工作原理主要根據cpu的執行機制所決定的.當多個應用程式例項同時執行時.作業系統會為 每乙個應用程式的實列,也就是乙個程序分配虛擬空間和系統資源,並且cpu會按照程式的優先順序為每一 個程式分配乙個時間段,然後程序在自已的時間段內再為每乙個純生分配時間片, 這樣執行緒玉會在指定的時間 內工作. 如果程序或執行緒在指定的時間內沒有完成它的工作,則cpu就會為這個程序分配下一輪的時間段.    所謂多執行緒並不是指所有執行緒同時工作,而是由於分配給執行緒的時間太少,從感覺上好像是同時執行, 如果一台電腦有兩個cpu,就可以真正實現多個執行緒同時工作.   每乙個應用程式的實列都必須存在乙個執行緒,這個執行緒稱為應用程式的主線程.      何時使用多執行緒    雖然多執行緒可以使應用程式具有較高的效能,但也不能盲目的為應用程式新增執行緒.這樣不但不會優化程式,  反而會影響程式的執行效率.由於執行緒會將單個問題分解,如果是乙個複雜的問題利用多個程式來解決自然是好 ,但是乙個簡單的問題也利用多執行緒就等於是將乙個簡單的問題複雜化, 增加系統的開銷.

對於多執行緒的使用,大致分為以下幾種情況.

(1)一處程式存在多個任務,這些任務可以同時執行,互不影響

(2)在應用程式執行時某個任務非常耗時,可以放到後台動行.  

(3)應用程式的某個響應事件中的演算法過於複雜,例如,應用程式在某個按鈕的單擊事件中執行乙個操作,如果該操作過於複雜  ,

就會導致應用程式處於停頓狀態,並出現程式未響應的    情況,這時另外開乙個執行緒,就不會出現這種現象

(4)對硬體裝置的開發  

(5)對圖形裝置的開發  

(6)對遊戲軟體的開發

(7)對資料庫的操作  

二、執行緒的排程

執行緒的排程主要是為執行緒分配合理的cpu執行時間,從而有效地完成執行緒的操作.根據排程的方式.可將執行緒排程分為   

1.非搶先式排程  

非搶先式排程排程是指當排程為乙個執行緒指定了時間片後,其他執行緒就不能再分配時間片,只有當這個執行緒用完cpu分配 分配給它的時間片後,排程才會為其他的執行緒分配時間片.例如,作業系統同時執行兩個程式,乙個程式為簡單的程式, 另乙個 程式為較複雜的程式.cpu首先為較複雜的程式分配的時間片,只要當較複雜的程式執行完才執行簡單的程式,這樣就影響了程 序的執行效果.   

2.搶先式排程

在一般的情況下,當執行緒用完cpu為它分配的時間片後,執行緒會將cpu的控制權交還給排程程式,此時排程程式會重新為所有 執行緒重新分配時間片,但執行緒滿足以下條件時,排程會收回cpu控制權,為其它執行緒分配時間片  

(1)當正在執行的執行緒由於某種原因處於阻塞狀態   

(2)當正在執行的執行緒呼叫了sleep方法   

(3)當某一未執行的執行緒的優先順序比當前執行的執行緒優先順序高時         

執行緒基礎學習一

1.執行緒的五個狀態 建立 就緒 執行 阻塞 終止 2.start之後並不一定是立即執行,代表的是就緒狀態 3.阻塞狀態 阻塞狀態是正在執行的執行緒由於某種原因放棄cpu的使用權,進入就緒狀態 有三種型別 執行的執行緒執行wait方法,執行緒被jvm放入等待池中 執行的執行緒獲取同步鎖時,該同步鎖被...

執行緒基礎學習3

執行緒的狀態 等待和喚醒的機制 在多個執行緒之間通過等待方法和喚醒方法進行通訊,沒有被喚醒的話就一直等待。package threadtest void wait 導致當前執行緒等待,直到另乙個執行緒呼叫該物件的 notify 方法或notifyall 方法。void wait long timeo...

多執行緒 基礎多執行緒學習分享

程序 程式是靜止,其真正執行時的程式才稱之為程序 執行緒 輕量級程序 light weight process 程序與執行緒區別 執行緒的組成 建立執行緒 主要的兩種方式 a 繼承thread類方法 步驟 1.編寫類 繼承thread 2.重寫run方法 3.建立執行緒物件 4.呼叫start方法啟...