执行绪的优先顺序.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文档。上传文档
查看更多
执行绪的优先顺序

第十五章 多執行緒 認識執行緒 學習如何建立執行緒 學習如何管理執行緒 認識執行緒的同步處理 認識執行緒 啟動執行緒 啟動執行緒前要先準備下列兩件事情: (1) 此類別必須延伸自Thread類別 (2) 執行緒的處理必須撰寫在run() 內 啟動執行緒的範例 執行緒的比較 下圖為單一執行緒與兩個執行緒的執行流程比較: 建立執行緒 如果類別本身已經繼承某個父類別,可以利用實作Runnable介面的方式建立執行緒 介面是實現多重繼承的重要方式 把處理執行緒的程式碼,放在實作Runnable介面的類別中的run() 就可以建立執行緒 執行緒的使用 使用Thread還是Runnable? 類別只能繼承一個類別,可以實作多個介面 如果要使用多執行緒的類別已經繼承其他類別,就必須實作(implement)Runnable介面 當某個類別實作Runnable介面時,在該類別裡必須要實作run() 若是繼承Thread類別,則要於該類別中改寫run() 執行緒的生命週期 (1/3) 每一個執行緒,在其產生和銷毀之前,均會處於下列五種狀態之一: 新產生的(newly created) 可執行的(runable) 正在執行的(executing) 執行緒的生命週期 (2/3) 新產生的執行緒 用new Thread() 建立物件時,執行緒便是這種狀態 用start() 啟動執行緒時才會配置資源 執行緒的生命週期 (3/3) 被凍結的狀態 發生下列的事件時,凍結狀態的執行緒便產生: (1) 該執行緒呼叫物件的wait() (2) 該執行緒本身呼叫sleep() (3) 該執行緒和另一個執行緒join() 在一起時 讓執行緒小睡片刻 等待執行緒 (1/2) app15_5是執行緒啟動後再加上字串的列印: 等待執行緒 (2/2) 下面的範例先執行dog,再執行cat執行緒: 執行緒的優先順序(1/3) 執行緒優先順序以數字1~10來表示,數字愈大表示優先權愈高,優先權愈高的愈先進入執行狀態 執行緒的優先順序(2/3) 執行緒的優先順序(3/3) 錯誤的執行緒 (1/2) 下面的範例是沒有同步處理的執行緒: 錯誤的執行緒 (2/2) 修正錯誤 要更正錯誤,只在add() 之前加上synchronized關鍵字,如下面的語法: * * 第25行用dog物件呼叫run() 的執行結果 第26行用cat物件呼叫run() 的執行結果 15.1 認識執行緒 執行緒(thread)是指程式的執行流程 「多執行緒」則可同時執行多個程式區塊 app15_1為單一執行緒的範例 15.1 認識執行緒 啟動執行緒的語法: class 類別名稱 extends Thread // 從Thread類別延伸出子類別 { 類別裡的資料成員; 類別裡的函數; 修飾子 run() // 改寫Thread類別裡的run() 函數 { 以執行緒處理的程序; } } 執行緒之定義語法 15.1 認識執行緒 app15_2可同時啟動多個執行緒 呼叫start() 時,會在排程器中登錄該執行緒,當它開始執行時,run() 自然會被呼叫 第26行用cat物件呼叫start() 的執行結果 第25行用dog物件呼叫start() 的執行結果 15.1 認識執行緒 15.2 實作Runnable介面來建立執行緒 15.2 實作Runnable介面來建立執行緒 第28行用t2物件呼叫run() 第27行用t1物件呼叫run() 15.2 實作Runnable介面來建立執行緒 15.3 執行緒的管理 被凍結的(blocked) 銷毀的(dead) 執行緒狀態的轉移與函數之間的關係 : 15.3 執行緒的管理 可執行的狀態 start() method啟動執行緒時,便進入可執行的狀態 最先搶到CPU資源的執行緒先執行run(),其餘的便在佇列(queue)中等待 執行的狀態 當執行緒開始執行run(),會進入執行的狀態。一次只會有一個執行緒處在「執行的狀態」中 15.3 執行緒的管理 被凍結因素消失的原因有下列幾點: (1) 如果執行緒是由呼叫物件的wait() 所凍結,則該物件的notify() 被呼叫時可解除凍結 (2) 執行緒進入睡眠(sleep)狀態,但指定的睡眠時間已到 銷毀的狀態 run() 執行結束或是由執行緒呼叫它的stop() 時,進入銷毀的狀態 15.3 執行緒的管理 catch接收的必須是InterruptedException例外 Math.random() 會產生0~1之間的亂數,乘上1000後變成0~1000之間的浮點數亂數,再強制轉換

文档评论(0)

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

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

1亿VIP精品文档

相关文档