JAVA语言实务培训教材.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文档。上传文档
查看更多
JAVA语言实务培训教材.ppt

執行緒 Thread;「執行緒」具有以下幾個基本特徵: 不是完整的程式。 隸屬於同一個程式的「執行緒」必需共享系統分配給所屬主程式的資源(如記憶體空間、CPU時間等)。 每一個「執行緒」都有自己的「執行堆疊」及「程式計數器」 程式可以設定「執行緒」的執行優先順序 及隸屬的「執行緒群組」。 每個「執行緒」於程式執行時的可能狀態有:born、ready、running、blocked、suspend、sleeping、waiting及dead。 ;各作業系統對於具有相同優先權的「執行緒」有不同的處理方式 。 Java Runtime(Java虛擬機器)會於開始執行程式前,自動為程式建立一個「執行緒」以便控制及記錄程式執行時的狀態,這個「執行緒」通稱為main thread,當main thread結束時(也就是說進入dead狀態時),程式的執行也就結束。 ;執行緒的程式架構;程式 Ex11_1 以Thread的子類別建立執行緒(1/2);程式 Ex11_1 以Thread的子類別建立執行緒(2/2);程式 Ex11_1 可能的執行結果:;程式 Ex11_2以定義Runnable界面建立執行緒 (1/2);程式 Ex11_2以定義Runnable界面建立執行緒 (2/2);執行緒的生命週期;程式 Ex11_3 使用isAlive()及join()範例(1/2);程式 Ex11_3 使用isAlive()及join()範例(2/2);程式 Ex11_3 可能的執行結果:;程式 Ex11.4 使用suspend()及resume()方法範例 (1/2) (修改Ex11_3的public class AliveJoin )以下述public class ResumeSuspend替代);執行之可能結果為:;執行緒的同步協調;程式 Ex11_5使用synchronized範例 (1/3);程式 Ex11_5使用synchronized範例 (2/3);程式 Ex11_5使用synchronized範例 (3/3);程式 Ex11_5執行後的結果為: ; 解決上述取號不正確的現象,我們必須在getNumber()方法之前加上synchronized保留字,修改如下: public synchronized int getNumber() {... } Java Runtime會確保在任何一個時間點,只有一個「執行緒」可以進入含有syhchronized保留字宣告的方法。 修改後,程式執行的結果: Visitor 0: Number: 1 Visitor 1: Number: 2 Visitor 2: Number: 3 Visitor 3: Number: 4 ;程式 Ex11_6 wait()及notify()使用範例 (1/5);public synchronized void setNumber() /* 設定ticketNumber的值 */ { if (!tickenTaken) /* 如果號碼尚末被取走則等待號碼被取走後才繼續執行 */ try {wait();} catch(InterruptedException e){}; number++; /* 設定新的號碼 */ tickenTaken=false; /* 設定號碼尚未被取走 */ notify(); /* 告知等待佇列中的第一個執行緒可以進入ready狀態以便恢復執行 */ } } // end of NumberQueue ? ;class Consumer extends Thread /* 取得號碼的執行緒 */ { int ticketNumber; NumberQueue nq; public Consumer(NumberQueue nq)  { this.nq = nq; } public void run() { ticketNumber = nq.getNumber(); /* 取得一個號碼 */ } } // end of Consumer ? class Producer extends Thread /* 設定新號碼的執行緒 */ { NumberQueue nq; public Producer(NumberQueue nq) { this. nq = nq; } public void run() { while (true) nq.setNumber(); /* 設定新的號碼 */ }

文档评论(0)

186****7785 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档