執行緒 同步習題答案

2022-09-06 16:06:10 字數 3138 閱讀 6828

基礎題

問題:請描述thread類中的

start()方法與run()方法的區別。

答:執行緒物件呼叫run()方法不開啟執行緒,僅是物件呼叫方法。執行緒物件呼叫start()方法開啟執行緒,並讓jvm呼叫

run()方法在開啟的執行緒中執行。

問題:請描述建立執行緒的兩種方式。

答:第一種方式是將類宣告為 thread 的子類。

定義thread類的子類,並重寫該類的run()方法,該run()方法的方法體就代表了執行緒需要完成的任務,因此把run()方法稱為執行緒執行體。

建立thread子類的例項,即建立了執行緒物件。

呼叫執行緒物件的start()方法來啟動該執行緒。

第二種方式宣告乙個類實現runnable 介面。

1. 定義

runnable

介面的實現類,並重寫該介面的

run()

方法,該

run()

方法的方法體同樣是該執行緒的執行緒執行體。

2. 建立

runnable

實現類的例項,並以此例項作為

thread

的target

來建立thread

物件,thread

物件才是真正的執行緒物件。

3. 呼叫執行緒物件的

start()

方法來啟動執行緒。

問題:請編寫程式,分別列印主線程的名稱和子執行緒的名稱。

要求使用兩種方式實現:

第一種方式:繼承thread類。

第二種方法:實現runnable介面。

答:操作步驟描述

第一種方式:繼承thread類

1.定義乙個子執行緒的類,繼承

thread

類;2.在子執行緒類中重寫

run方法,在

run方法中列印子執行緒的名稱;

3.定義乙個測試類;

4.在main

方法中列印主線程的名稱;

5.在main

方法中建立子執行緒物件;

6.呼叫子執行緒物件的

start

方法,開啟子執行緒;

第二種方式:實現runnable介面

1.定義乙個子任務類,實現

runnable

介面;2.在子任務類中重寫

run方法,在

run方法中列印子執行緒的名稱;

3.定義乙個測試類;

4.在main

方法中列印主線程的名稱;

5.在main

方法中建立乙個子任務物件;

6.在main

方法中建立乙個

thread

類的物件,並把子任務物件傳遞給

thread

類的構造方法;

7.呼叫

thread

類物件的

start

方法開啟子執行緒;

操作步驟答案

l第一種方式:繼承thread類

/** 1.

定義乙個子執行緒的類,繼承

thread

類;*/

public class subthread extends thread 

}

/** 3.

定義乙個測試類

*/

public class threaddemo 

}

第二種方式:實現runnable介面

/** 1.

定義乙個子任務類,實現

runnable

介面。*/

public class subrunnable implements runnable 

}

/** 3.

定義乙個測試類。

*/

public class runnabledemo 

}

問題:請描述實現runnable介面比繼承

thread

類所具有的優勢:

答:1. 適合多個相同的程式**的執行緒去共享同乙個資源。

2. 可以避免

j**a

中的單繼承的侷限性。

3. 增加程式的健壯性,實現解耦操作,**可以被多個執行緒共享,**和資料獨立。

4. 執行緒池只能放入實現

runable

或callable

類執行緒,不能直接放入繼承

thread

的類。有幾種狀態呢 ?

答:new(新建

) 執行緒剛被建立,但是並未啟動。

runnable(可執行

)執行緒可以在j**a虛擬機器中執行的狀態,可能正在執行自己**,也可能沒有,這取決於作業系統處理器。

blocked(鎖阻塞

)當乙個執行緒試圖獲取乙個物件鎖,而該物件鎖被其他的執行緒持有,則該執行緒進入blocked狀態;當該執行緒持有鎖時,該執行緒將變成

runnable

狀態。waiting(無限等待

)乙個執行緒在等待另乙個執行緒執行乙個(喚醒)動作時,該執行緒進入waiting狀態。進入這個狀態後是不能自動喚醒的,必須等待另乙個執行緒呼叫

notify

或者notifyall

方法才能夠喚醒。

timed waiting(計時等待

)同waiting狀態,有幾個方法有超時引數,呼叫他們將進入

timed waiting

狀態。這一狀態將一直保持到超時期滿或者接收到喚醒通知。帶有超時引數的常用方法有

thread.sleep

、object.wait

。teminated(被終止

)因為run方法正常退出而死亡,或者因為沒有捕獲的異常終止了

run方法而死亡。

python習題及答案

判斷101 200之間有多少個素數,並輸出所有素數 素數是除了1和它本身以外都不能被整除的數 l for i in range 101,200 for j in range 2,i 1 if i j 0 break else print l 列印出所有的 水仙花數 所謂 水仙花數 是指乙個三位數,其...

Java Map集合習題答案

一 請簡述map 的特點。map每個元素由鍵與值兩部分組成 map鍵不能重複,每個鍵對應乙個值 鍵和值可以為null 二 說出entry鍵值對物件遍歷map集合的原理。map中存放的是兩種物件,一種稱為key 鍵 一種稱為value 值 它們在在map中是一一對應關係,這一對物件又稱做map 中的乙...

數學建模習題答案

1.建模過程 將材料1,3做成丙產品會虧本,將材料2做成丙產品不會賺錢,故不做丙產品。並且可以看出材料1最貴,材料2最便宜,故盡可能多用材料2,少用材料1.故產品甲用 50的材料1,25的材料2,25的材料3.產品乙用 25的材料1,50的材料2,25的材料3。2.變數說明 將x1,x2分別設為產品...