程序與執行緒的簡介

2021-10-22 08:36:26 字數 2455 閱讀 6643

在程式中執行的多個執行緒,每個執行緒完成乙個功能,並於其他的執行緒併發執行,這就是多執行緒系統可以分配每個程序一段有限的使用cpu的時間(cpu 時間片),cpu在短時間中執行某個程序,然後下乙個時間片跳到另乙個程序中去執行。由於cpu轉換比較快,所以是的每乙個程序好像是同時執行一樣。

thread 類中常用的兩個構造方法如下:

這裡就可以看出mian執行緒 和 thream-0執行緒交替實現,效果十分不錯

將for迴圈體中睡眠注釋掉,main執行緒 與 thread-0執行緒 就沒有那麼明顯的交替實現了,可以通過增加迴圈次數,或者新增睡眠時間。 有可能看不到這麼明顯的效果,這也很正常。所謂的多執行緒,指的是兩個執行緒的**可以同時執行,而不必乙個執行緒需要等待另乙個執行緒內的**執行完才可以執行。對於單核cpu來說,是無法做到真正的多執行緒的,每個時間點上,cpu都會執行特定的**,由於cpu執行**時間很快,所以兩個執行緒的**交替執行看起來像是同時執行的一樣。那具體執行某段**多少時間,就和分時機制系統有關了。分時系統把cpu時間劃分為多個時間片,作業系統以時間片為單位片為單位各個執行緒的**,越好的cpu分出的時間片越小。所以看不到明顯效果也很正常,乙個執行緒列印5句話本來就很快,可能在分出的時間片內就執行完成了。

runnable介面也可以實現執行緒,這種方式擴充套件性強,可以實現乙個介面,還可以再去繼承其他類,當然這個也是要重寫run方法的,實現該介面後與thread類一起使用。即實現runnable介面的程式會建立乙個thread 物件,並將runnable物件與thread物件進行相關聯。

**演示:

車票購買系統,目前一共還有五十張票,而且它有四個視窗進行售票。因為種種原因存在網路延遲(用睡眠來模擬),會出現當視窗1已經售出最後一張但由於延遲導致視窗234並沒有知道已經銷售完了,導致出現無票銷售情況。( 想要解決以上問題(也就是執行緒安全問題),只讓乙個執行緒進入,並阻止另乙個執行緒進入,那麼就使用到了synchronize(同步**塊)或者繼承lock(鎖)。)

package lizi;

public

class

runnabledome}/*

車票購買系統,目前一共還有五十張票,而且它有四個視窗進行售票。因為種種原因存在網路延遲(用睡眠來模擬),

會出現當視窗1已經售出最後一張但由於延遲導致視窗234並沒有知道已經銷售完了,導致出現無票銷售情況。

( 想要解決以上問題(也就是執行緒安全問題),只讓乙個執行緒進入,並阻止另乙個執行緒進入,

那麼就使用到了synchronize(同步**塊)或者繼承lock(鎖)。)

*/class

ticket

implements

runnable

catch

(exception e)

system.out.

println

(thread.

currentthread()

.getname()

+":正在銷售中"

+"目前餘票:"

+(number_ticket--)+

"該視窗銷售後余票:%d"

會發現多執行緒的實現順序是隨機實現的,而出現餘票為負數的情況 和 餘票相同的情況。

因為在視窗3執行緒先搶到執行權進來時,會休眠2秒,這段時間其他的執行緒也搶到執行權,同樣也會休眠2秒,同理這樣字下去。當視窗3甦醒,票數減一,此時餘票已經為零了,但其他執行緒依然還在執行中,所以出現了負數的餘票。

原因是ticket中–不具有原子性(原子性也就是式子不是一次計算出結果的,而是分布計算結果的,如:i–,它是先輸出i的值,然後在進行i=i-1,同理i++)式子,如:當視窗1休眠時,視窗3進入之後也休眠,這時視窗1甦醒了,進行到輸出i的值這一步時,視窗3甦醒了並搶到了執行權,它也進行了輸出i,由於上一步還沒進行到i-1的步驟,因此視窗3和視窗1輸出的值相同。這些都是在網路延遲中會出現的餘票相同的情況問題。

上述問題涉及了執行緒安全問題。

程序與執行緒 簡介

執行緒 cpu排程的乙個最基本單位,執行緒由兩個部分組成 乙個組成部分是執行緒的核心物件,作業系統用它來對執行緒實施管理。核心物件也是系統用來存放執行緒統計資訊的地方 另乙個部分是執行緒堆疊,它用於維護執行緒在執行 時需要的所有函式引數和區域性變數,與程序相比,程序所佔資源要少的很 程序 程序由兩個...

執行緒 程序及其排程簡介

知識需要不斷總結 驗證 迭代,知其然,知其所以然。1 程序和執行緒 程序和執行緒的區別與聯絡 程序 資源申請的最小單位 執行緒 資源排程的最小單位,程序的一部分,描述指令流的執行狀態。核心中,描述程序的資料結構pcb 程序控制塊,描述執行緒的資料結構 tcb 執行緒控制塊。圖1 單執行緒程序 圖2 ...

程序 執行緒簡介及多執行緒的優缺點

先介紹下程序 執行緒 多執行緒,再總結下多執行緒的優缺點 程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,也就是應用程式的執行例項,程序是系統進行資源分配和排程的乙個獨立單位。每個程序是由私有的虛擬位址空間 資料和其它各種系統資源組成,程序在執行過程中建立的資源隨著程序的終止而被銷毀,...