- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用Thread 类别建立执行绪
第 15 章 多執行緒 (Multithreading) 本章提要 15-1 甚麼是執行緒? 15-2 執行緒的同步 (Synchronization) 15-3 執行緒間的協調 15-4 綜合演練 前言 到目前為止, 我們所撰寫的程式流程都是從頭執行到尾, 同一時間只會進行一件事。 可是在實際撰寫程式的時候, 常常會遇到同一時間希望能夠進行多件事情的狀況。 舉例來說, 在前幾章曾經撰寫過一個碼錶程式, 細心思考的讀者可能已經發現到, 這個碼錶程式其實一點用處都沒有。 由於同一時間只能做一件事, 因此碼錶程式除了倒數計時以外, 甚麼事也不能做。 前言 我們所需要的是倒數的同時, 另一邊又可以進行其它工作的碼錶。 這在現實生活中也很常見, 像是最簡單的泡麵來說, 將麵擺好, 加入沸水後, 可以準備個倒數的鬧鐘, 定好三分鐘後響。 這樣一來, 就可以看看書, 等到鬧鐘響了, 就可以享用熱騰騰的麵了。 這泡麵、倒數、看書就是三件同時進行的工作, 如果同一時間只能進行一件事, 那可就麻煩了。 前言 Java 就提供這種同時進行多項工作的能力, 稱為多執行緒 (Multithreading)。 由於具有此項能力, 使得撰寫 Java 程式時增加了許多的彈性, 也使得程式撰寫起來更加直覺。 15-1 甚麼是執行緒? 要知道甚麼是執行緒, 其實並不難。想像一下一家製造汽車的工廠, 為了達到最高的效率, 工廠都會以生產線的方式, 將汽車相互獨立的元件分開且同時製造。 由於製造車身和製造引擎並不需要互相等待, 因此可以有一條生產線製造車身、一條生產線製造引擎。 這樣一來, 車身和引擎就可能同時完成, 馬上就可以進行組裝。 否則的話, 如果車身要等引擎製造完成才能動工, 那麼整台車製造完成的時間就會拖長了。 甚麼是執行緒? 如果將程式對比為製造汽車的工廠, 那麼執行緒就是工廠中的每一條生產線, 可以和其他的執行緒同時進行手上的工作。 也就是說, 每一個執行緒有它自己的流程, 當程式執行時, 每一個執行緒便依據自己的流程進行, 同時處理各自的工作。 甚麼是執行緒? 使用 Thread 類別建立執行緒 接下來我們就實際建立一個多執行緒的程式, 讓您可以觀察程式的執行結果, 以確實瞭解執行緒的含意。 在 Java 中, 每一個執行緒都是以一個 Thread 物件來表示, 要建立新的執行緒, 最簡單的方法就是從 Thread 類別 (屬於 java.lang 套件) 衍生新的類別, 並且重新定義 Thread( ) 類別中的 run() 方法, 進行這個新執行緒所要負責的工作。例如: 使用 Thread 類別建立執行緒 使用 Thread 類別建立執行緒 使用 Thread 類別建立執行緒 使用 Thread 類別建立執行緒 在第 3 行中, 定義了一個 Thread 的子類別 TimerThread, 並且重新定義了run( ) 方法, 這個方法的內容只是不斷的取得目前的時間, 然後顯示在螢幕上。 這裡有兩件事需要注意: 使用 Thread 類別建立執行緒 取得時間的方法是產生一個 java.util 套件中的 Date 物件, 這個物件的建構方法會取得目前的時間, 記錄下來。Date 類別重新定義了 toString( ) 方法, 可以將其記錄的日期時間以特定格式轉成字串。相關的說明請參考 JDK 文件。 第 6 行的 for 迴圈是故意用來減緩程式顯示訊息的速度, 避免不斷迅速地執行第 8 行在螢幕上顯示訊息, 而無法閱讀結果。 使用 Thread 類別建立執行緒 在 main( ) 方法中, 就建立了一個 TimerThread 物件, 然後呼叫其 start() 方法。 start( ) 是繼承自 Thread 的方法, 執行後, 就會建立一個新的執行緒, 然後在這個新的執行緒中呼叫 run( ) 方法。從此開始, run( ) 方法的執行就和原本程式的流程分開, 同時執行。 也就是說, 新的執行緒就從第 5 行開始執行, 而同時原本的程式流程則會從 start( ) 中返回, 由第 18 行接續執行。 使用 Thread 類別建立執行緒 main( ) 方法中接下來的內容就和 TimerThread 類別的 run( ) 方法相似, 只是顯示的訊息開頭不同而已。 由於 main( ) 方法與 run( ) 方法中各是兩個無窮迴圈, 所以兩個執行緒就不斷的顯示目前的日期時間。 如果要結束程式, 必須按下 [Ctrl] + [C] 鍵強迫終結。 使用 Thread 類別建立執行緒 您可以從執行結果中看出來, 新執行緒與原本的流程是交錯執行的, 剛開始新執行緒先顯示訊息, 然後舊流程插入, 如此反覆執行。 如果再重新執行程式, 結果並不會完全相同,
您可能关注的文档
- 从而得到多态性标记RFLP(限制性片段长度多态性) Principle for RFLPs.PPT
- 从造形创作到逻辑思考与空间掌握—Soma cube 积木活动的经验省思 .PDF
- 任务九采样与运输保存.PPT
- 任务十九斜弯曲的强度计算.DOC
- 仪器设备采购技术规范(初中音体美卫分册) - 内蒙古政府采购网.DOC
- 任意高频信号真有效值测量技术.PDF
- 企业接产条件 - 国家科技成果转化服务十堰示范基地信息服务平台.DOC
- 休运四甲-拥有美好人生的第一步一定要有一个乐观的心 如此一来面 .DOC
- 优派优派VS12618 - 南洋高科技集团.DOC
- 仙女山G九畹溪断裂带断层泥石英微形貌特征及其年代学意义.PDF
- 低放射性废弃物最终处置工程障壁中缓冲回填材料调查评价第一次 .PDF
- 供应商响应文件编制要求 - 中国国际招标网.DOC
- 使用说明书 - ITW集团COOKMASTER商业厨房设备.PDF
- 使用说明SONICflex quick 2008 S - REF 10070541 - KaVo Dental.PDF
- 依托咪酯对大鼠海马CA1区全细胞自发性兴奋性突触后电流的影响 于 .DOC
- 依据巴塞尔3要求出具数据20792869-849.PDF
- 例有一半径为的金属球A.PPT
- 依兰-伊通断裂方正段晚第四纪以来的构造活动及其地貌表现.PDF
- 使用说明书 - Oticon Medical.PDF
- 促进中小企业自主创新对策研究报告 - 宁波科技局.DOC
文档评论(0)