执行绪的同步.ppt

  1. 1、本文档共114页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
执行绪的同步.ppt

第 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 類別建立執行緒 您可以從執行結果中看出來, 新執行緒與原本的流程是交錯執行的, 剛開始新執行緒先顯示訊息, 然後舊流程插入, 如此反覆執行。 如果再重新執行程式, 結果並不會完全相同,

文档评论(0)

wendang_12 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档