執行緒和程序

2022-05-04 21:12:07 字數 2244 閱讀 4478

執行緒可以看成輕量級的程序,同一類執行緒共享**和資料空間,每個執行緒有獨立的執行棧和程式計數器(pc),執行緒切換的開銷小。

(3)所處環境:在作業系統中能同時執行多個任務(程式)。

在同一應用程式中有多個順序流同時執行。

(4)分配記憶體:系統在執行的時候會為每個程序分配不同的記憶體區域。

除了cpu之外,不會為執行緒分配記憶體(執行緒所使用的資源是它所屬的程序的資源),執行緒組只能共享資源。

(5)包含關係:沒有執行緒的程序可以被看成單執行緒,如果乙個程序內擁有多個執行緒,則執行過程不是一條線的,而是多條線(執行緒)共同完成的。

執行緒是程序的一部分,所以執行緒有時被稱為輕權程序或者是輕量級程序。

2.什麼是多執行緒?

多執行緒就是指乙個程序中同時有多個執行路徑(執行緒)正在執行。

3.為什麼要使用多執行緒?

(2)可以提高程式的效率。

(3)在一些等待的任務上,如使用者輸入,檔案讀取等,多執行緒就非常有用了。

4.實現多執行緒的方法:

(1)繼承thread類,重寫run()方法,繼承了thread類,就不能繼承其他類了:

(2)實現runnable介面,重寫run()方法,沒有返回值:

(3)實現callable介面,重寫call()方法,有返回值,可以丟擲異常:

5.執行緒的五大狀態:新建狀態,就緒狀態,執行狀態,阻塞狀態,死亡狀態。

注意:(1)執行緒進入死亡狀態之後不能重新開啟,重新開啟是新的執行緒。

(2)執行緒進入阻塞狀態之後,重新恢復的話是進入就緒狀態。

6.執行緒進入就緒狀態的四個原因:

(1)建立執行緒以後,呼叫start()方法;

(2)解除阻塞,從阻塞狀態恢復;

(3)呼叫yield()方法,結束中斷,禮讓執行緒,讓當前正在執行的執行緒暫停,不是阻塞狀態,而是將執行緒從執行狀態轉入就緒狀態。

(4)jvm將cpu從本地執行緒切換到其他執行緒。

7.執行緒進入阻塞狀態的四種原因:

(1)呼叫sleep()方法:sleep()方法(休眠)是執行緒類(thread)的靜態方法,呼叫此方法會讓當前執行緒暫停執行指定時間,將執行機會(cpu)讓給其他執行緒,但是物件的鎖依然保持,因此休眠時間結束後會自動恢復(執行緒回到就緒狀態)。

(2)呼叫wait()方法:wait()是object類的方法,呼叫物件的wait()方法導致當前執行緒放棄物件的鎖(執行緒暫停執行),進入物件的等待池(wait一pool),只有呼叫物件的notify()方法(或notifyall()方法)時才能喚醒等待池中的執行緒進入等鎖池(lock pool),如果執行緒重新獲得物件的鎖就可以進入就緒狀態。

(3)呼叫join()方法:阻塞指定執行緒等到另乙個執行緒完成以後再繼續執行。合併執行緒,待此執行緒執行完畢後,再去執行其他執行緒,其他執行緒阻塞。

(4)io操作中的read和write。

8.終止執行緒的兩種方式:

(1)執行緒正常執行完畢:次數限制;

(2)外部干涉:加入標識。

注意:不要不使用stop和deatory終止執行緒,不安全。

9.什麼是守護執行緒?

(1)執行緒:執行緒分為使用者執行緒和守護執行緒。

(2)虛擬機器必須等待使用者執行緒執行完畢;

(3)虛擬機器不必等待守護執行緒執行完畢;

(4)守護執行緒是為使用者執行緒服務的。

執行緒和程序

標準的定義是 程序是執行緒的容器,乙個程序可於乙個或者多個執行緒,它是系統分配資源的基本單位 同乙個程序下,執行緒共享位址空降 已經開啟的檔案 訊號處理函式 報警訊號和其他,執行緒自己只保留程式計數器和棧。但是很遺憾的,這個只是教科書上的定義,實際情況是每個作業系統實現的作業系統特性不同,實現的方法...

程序和執行緒

乙個程序就是當前正在執行的乙個程式,包括程式的暫存器 程式計數器和變數的當前值。不同的程序擁有不同的位址空間。而執行緒可以理解為是程序中的控制流。同乙個程序內也就是說在同乙個位址空間內可以有多個控制流。也就是可以有多個線 程,他們共享位址空間。我們通常將程序視為是資源的集合,程序中有程式的正文 資料...

執行緒和程序

對於求職者,在面試的時候大多都會被問到 你對多執行緒了解麼?給我講講執行緒和程序的區別吧。在unix中,乙個程序可以理解為執行緒 位址空間 檔案描述符 資料,道破現實,其實就相當於老闆和員工,老闆就是程序,員工就是執行緒。老闆需要僱傭若干員工 執行緒 還要有辦公樓 位址空間 還要有若干的辦公裝置 檔...