执行绪Threads课件.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程式碼撰寫如下: * * * * 上述程式碼分析如下: 第2行建立一個靜態的籃球處理機物件ball,importball與outportball類別中會應用到此物件。 第15~19行設定籃球代號為隨機1~10的號碼,每輸入一次就等待0.5秒。 第33~37行顯示有哪幾個號碼的籃球,每輸出一次就等待0.5秒。 第50~61行的importball函式表示當索引值index大於或等於9時,就等待1秒,或執行到第60行喚醒執行緒。 第62~74行的outportball函式表示當索引值index小於0時,就等待執行到第72行喚醒執行緒。 * 完成後,執行程式的畫面顯示如下: * 溫故知新-1: * 溫故知新-2: * 自我突破習題-選擇題: * 自我突破習題-實作題: * * * 上述建立多個執行緒的程式碼說明如下: 上述程式碼與範例檔ch11_01_02的差別在於粗體字的部份,因為利用Runnable介面必須要間接建立執行緒,所以要在程式碼第15與17行利用Thread類別建立物件。 完成後,執行程式的畫面與範例檔ch11_01_02相同。 * 11-2 管理執行緒 11-2.1 執行緒的生命週期 11-2.2 在排程中加入執行緒 11-2.3 執行緒的同步化 11-2.4 執行緒之間的溝通 * 前言: 執行緒可能會隨著不同的操作,而處於不同的狀態,當程式中有多個執行緒同時執行時,就必須管理每個執行緒的執行方式,這樣這些執行緒才不會互相干擾。 * 11-2.1 執行緒的生命週期 其實每個執行緒在新建到終止之間,都會處於生命週期的四種狀態之一,執行緒的生命週期如下圖所示: * 有關生命週期的說明如下-1: 新建(new):利用關鍵字new建立新的執行緒物件,系統尚未配置CPU資源,就是處於此狀態。 執行start函式,執行緒會進入可執行(runnable)狀態。 執行stop或run函式結束時,執行緒會進入死亡(dead)狀態。 可執行(runnable):啟動執行緒後,新的執行緒會進入佇列(queue)中等待執行的機會,程式會先執行優先權值較高的執行緒。 執行yield函式,執行緒會將執行權轉讓給其他執行緒。 執行stop或run函式結束時,執行緒會進入死亡(dead)狀態。 執行sleep、suspend、wait函式或等待I/O完成時,執行緒會進入不可執行(not runnable)狀態。 * 有關生命週期的說明如下-2: 不可執行(not runnable):執行緒處於凍結的狀態,等待重新進入佇列的機會。 執行stop或run函式結束時,執行緒會進入死亡(dead)狀態。 當sleep函式的睡眠時間結束,或是執行interrupt函式時,執行緒會回到可執行狀態。 執行resume函式可以解除suspend函式凍結的執行緒,重新回到可執行狀態。 執行notify函式可以解除wait函式凍結的執行緒,重新回到可執行狀態。 當I/O(輸入/輸出動作)完成時,執行緒會重新回到可執行狀態。 死亡(dead):當執行stop函式或是run函式的程式區塊結束時,就會進入死亡狀態。 * 11-2.2 在排程中加入執行緒 如果程式中存活多個執行緒,而希望程式按照想要的順序,執行執行緒中的敘述時,就可以利用join函式暫停目前正在執行的執行緒,然後執行指定的執行緒內容。 * 下面先來看看沒有利用join函式執行執行緒物件的程式碼: * * 完成後,畫面顯示如下: 完成後執行程式,本來希望在最後一行才顯示字串“複習功課完畢...”,但是執行畫面卻顯示在第一行。這是因為雖然第6與7行啟動執行緒math與english,但Java本身會自動執行main執行緒的start函式,所以先顯示第8行的字串後,才會執行執行緒中run函式的程式碼,畫面顯示如下: 範例檔ch11_02_02a可能不是設計者想要的執行結果,這時可以利用join函式暫停目前的main執行緒,然後先執行指定的執行緒,等到指定的執行緒執行完成,再接著執行被暫停的main執行緒。 * 下面將範例檔ch11_02_02a修改為先執行math與english執行緒,再執行main執行緒: * 上述程式碼與範例檔ch11_02_02a的差別在於粗體字的部分,第8與13行利用join函式強制程式先執行math與english執行緒,值得注意的是,使用join函式必須在程式中拋出InterruptedException例外。 * 完成後,執行程式的畫面顯示如下: * 11-2.3 執行緒的同步化 如果程式同時執行同一個類別產生的多個執行緒,因為這些執行緒共用相同的成員變數,所以當進行新增、刪除或修改資料等動作時,可能會存取到錯誤的資料,例如:X物件在修改物件的sum成員變數時,

您可能关注的文档

文档评论(0)

liuxiaoyu99 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档