如果僅僅做到這一步,完成一個像Windows 3.1中的多任務系統,實際只用了一個線程,沒有利用Java多線程的特點。應該注意到,雖然Java系統中線程調度與平臺相關,但是相同優先級的線程之間分時運行的特點基本上是不受特定平臺影響的。各個相同優先級的線程共享CPU資源,而線程又被映射成了Java語言中的Thread對象。這些對象就可以被認為是CPU資源的代表。Thread與線程執行代碼主體的接口—Runnable之間是多對一的關系。一個Runnable可以被多個Thread執行。只要將Runnable的執行代碼設置成上述的消息調度函數,并和消息隊列對應上,那么就可以通過控制為它服務的Thread個數來決定消息隊列執行的快慢,并且在運行時可以動態地新增(new)和退出Thread對象。這樣就能任意調整不同消息隊列在執行時所占用CPU資源的多少。至此,任何一個Java調用都可以在Thread個數不同的消息隊列中選擇,并可以調整這些消息隊列服務的Thread個數,從而實現在運行時調整任務所占用的CPU資源。
縱觀整個方案,由于僅僅基于Java語言固有的Method對象,不同任務間動態分配CPU資源并沒有對任務的性質及其處理流程有任何限制,那么在消息隊列中沒有高優先級消息時,低優先級消息的處理函數自然會全部占用CPU資源。在不同消息隊列處理速度任意設置時,并沒有將特定的消息限制在快的或者慢的消息隊列上。如果系統的負荷超出(比如消息隊列長度超過一定限制),只要將隊列中低優先級消息換出或者拒絕不能處理的消息進入,那么系統的運行就可以基本上不受負荷壓力的影響,從而最大保障用戶的關鍵業務需求。
文章來源于領測軟件測試網 http://www.kjueaiud.com/