java程式設計思想練習題 第21章練習1 yield

2021-09-02 12:41:16 字數 2172 閱讀 2071

題目:實現乙個runnable。在run()內部列印乙個訊息,然後呼叫yield()。重複這個操作三次,然後從run中返回。在構造器中放置一條啟動訊息,並且放置一條在任務終止時的關閉訊息。使用執行緒建立大量的這種任務並驅動他們。

package test;

public class test }}

class runabletest implements runnable

@override

public void run()

system.out.println(stopstr); }

}

結果是:

#1  start!

#2 start!

#3 start!

#1 loop1

#2 loop1

#2 loop2

#1 loop2

#1 loop3

#1 stop!

#2 loop3

#2 stop!

#4 start!

#3 loop1

#3 loop2

#5 start!

#4 loop1

#3 loop3

#4 loop2

#3 stop!

#4 loop3

#4 stop!

#6 start!

#7 start!

#5 loop1

#5 loop2

#5 loop3

#5 stop!

#7 loop1

#6 loop1

#8 start!

#6 loop2

#7 loop2

#7 loop3

#6 loop3

#6 stop!

#7 stop!

#9 start!

#8 loop1

#8 loop2

#8 loop3

#8 stop!

#10 start!

#9 loop1

#9 loop2

#9 loop3

#9 stop!

#10 loop1

#10 loop2

#10 loop3

#10 stop!

如果把yield去掉的話結果是:

#1  start!

#2 start!

#3 start!

#1 loop1

#1 loop2

#1 loop3

#1 stop!

#4 start!

#2 loop1

#5 start!

#2 loop2

#2 loop3

#2 stop!

#5 loop1

#5 loop2

#5 loop3

#5 stop!

#3 loop1

#3 loop2

#3 loop3

#3 stop!

#4 loop1

#4 loop2

#4 loop3

#4 stop!

#6 start!

#7 start!

#8 start!

#7 loop1

#7 loop2

#7 loop3

#7 stop!

#6 loop1

#6 loop2

#6 loop3

#6 stop!

#9 start!

#10 start!

#9 loop1

#9 loop2

#9 loop3

#9 stop!

#10 loop1

#10 loop2

#10 loop3

#10 stop!

#8 loop1

#8 loop2

#8 loop3

#8 stop!

結論:我們發現把yield去掉之後每個執行緒的三次迴圈基本都一下子輸出了,因為任務比較簡單可以在乙個時間片內完成,所以在中途沒有切換上下文。而增加了yield之後,執行完一次迴圈之後,該執行緒有很大機率被切換掉。

第3章練習題

1 在這一章中,所謂的過濾是什麼意思?有什麼意義?過濾是指下層驅動程式和上層軟體之間的過濾層,在上下層進行資料交換時進行掃瞄過濾的過程 2 何為核心物件?我們已經接觸到了哪幾種核心物件?核心物件是核心中的一塊記憶體,是一種資料結構,負責維護該物件的資訊。裝置物件,驅動物件,進執行緒物件 3 何為裝置...

第5章 練習題

5.1 空語句就是乙個單獨的分號 在程式的某個地方語法上需要一條語句但是邏輯上不需要,此時應該使用空語句 5.2用花括號括起來的語句序列,在程式的某個地方語法上需要一條語句,但邏輯上需要多條語句時用 5.3 p5 3.cpp include int main std cout sum of 1 to...

第2章 練習題

2.9 a 不合法,變數要在輸入前定義 b 不合法,存在丟失資訊的風險 c 不合法,wage未定義 d 會被轉換為整型 2.10 global str 空字串 global int 0 local int 垃圾值 local str 垃圾值 2.11 a 宣告 定義 b 宣告 定義 c 宣告 2.1...