第 10 章 Java 的執行緒 10-1 執行緒的基礎 10-2 Java 執行緒的使用方法 10-3 Java 執行緒的同步 10-4 管道串流的執行緒.

Slides:



Advertisements
Similar presentations
FCU, Department of ECE, IC Design Research Lab. TEL: # 4945 Pre-SIm , Post-Sim.
Advertisements

Divide-and-Conquer. 什麼是 divide-and-conquer ? Divide 就是把問題分割 Conquer 則是把答案結合起來.
6-1 指標簡介 6-2 指標與陣列 6-3 動態配置記憶體 6-4 本章綜合練習
建立使用案例敘述 --Use Case Narrative
第七章 抽樣與抽樣分配 蒐集統計資料最常見的方式是抽查。這 牽涉到兩個問題: 抽出的樣本是否具有代表性?是否能反應出母體的特徵?
: A-Sequence 星級 : ★★☆☆☆ 題組: Online-judge.uva.es PROBLEM SET Volume CIX 題號: Problem D : A-Sequence 解題者:薛祖淵 解題日期: 2006 年 2 月 21 日 題意:一開始先輸入一個.
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
Reference, primitive, call by XXX 必也正名乎 誌謝 : 部份文字取於前輩 TAHO 的文章.
What is static?. Static? 靜態 ? class Test { static int staticX; int instanceX; public Test(int var1, int var2) { this.staticX = var1; this.instanceX =
在 Ad-hoc 網路中實現點對 點發送訊息與廣播訊息. 檔案下載  範例程式可在下列網址取得  DEMO 程式可在下列網址取得
1 第一章 Word 的基本觀念 內容概要: Word 的特色 啟動與離開 Word 的方法 滑鼠游標與外型的介紹 基本操作 Word 視窗法則 使用 Word 遭遇問題時, 應如何利用軟體特 性而獲得輔助解說.
第 15 章 建立網路應用程式 15-1 瀏覽程式的建立 15-1 瀏覽程式的建立 15-2 媒體播放程式 15-2 媒體播放程式 15-3 寄送電子郵件 15-3 寄送電子郵件 15-4 檢查 POP 3 的電子郵件 15-4 檢查 POP 3 的電子郵件.
1 Web of Science 利用指引 單元二 瀏覽與處理查詢結果. 2 瀏覽檢索結果 查出的結果,預設以時間排列, 使用者可改變結果的排列方式: 還可以依被引用次數、相關度、 第一作者、刊名、出版年等排序 回到前先查的結果畫面 點選想看資料的完整書目 本館訂購範圍的期刊 全文,便可直接連結.
第 15 章 Servlet 程式設計 Java 2 程式設計入門與應用. 2 目錄 15-1 Servlet 的簡介 15-1 Servlet 的簡介 15-2 建立 Servlet 程式 15-2 建立 Servlet 程式 溫故知新 自我突破習題.
Review of Chapter 3 - 已學過的 rules( 回顧 )- 朝陽科技大學 資訊管理系 李麗華 教授.
建立靜態資料成員 關鍵字: static 靜態資料成員不屬於特定物件,而是該類物件 所共同擁有的,可做為類別範圍裡的靜態變數。
第 18 章 名稱空間與例外處理 18-1 名稱空間 18-1 名稱空間 18-2 例外處理 18-2 例外處理.
1 單元三 查詢結果的引用分析 Web of Science 利用指引 查看出版及被引用情況 在查詢結果的清單中,可以瀏覽近 20 年來查詢主題出版和被引用的情況。
第 1 章 VB.NET 的基礎 1-1 程式語言的基礎 1-1 程式語言的基礎 1-2 VB.NET 的基礎 1-2 VB.NET 的基礎 1-3 VB.NET 應用程式的開發環境 1-3 VB.NET 應用程式的開發環境.
JAVA 程式設計與資料結構 第十章 GUI Introdution III. File Chooser  File Chooser 是一個選擇檔案的圖形介面, 無論我們是要存檔還是要開啟檔案,使 用這個物件都會讓我們覺得容易且舒適。
第 7 章 程序與函數 7-1 模組化程式設計 7-1 模組化程式設計 7-2 VB.NET 的程序與函數 7-2 VB.NET 的程序與函數 7-3 程序與函數的變數範圍 7-3 程序與函數的變數範圍 7-4 VB.NET 常用的內建函數 7-4 VB.NET 常用的內建函數 7-5 遞迴函數 7-5.
第 15 章 VB.NET 網路應用程式 15-1 瀏覽程式的建立 15-1 瀏覽程式的建立 15-2 媒體播放程式 15-2 媒體播放程式 15-3 寄送電子郵件 15-3 寄送電子郵件 15-4 檢查電子郵件 POP 檢查電子郵件 POP 3.
Introduction to Java Programming Lecture 5: Using Java Classes : String & Math Spring 2009.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件 9-5 表單的鍵盤事件 9-5 表單的鍵盤事件 9-6 控制項的事件 9-6 控制項的事件.
Introduction to Java Programming Lecture 17 Abstract Classes & Interfaces.
24-6 設定開始與結束場景中的 程式 最後我們要替這個遊戲收個尾, 幫它把開始 的等待畫面跟結束畫面處理一下。
: The largest Clique ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11324: The largest Clique 解題者:李重儀 解題日期: 2008 年 11 月 24 日 題意: 簡單來說,給你一個 directed.
Chapter 20 塑模動態觀點:狀態圖 Statechart Diagram. 學習目標  說明狀態圖的目的  定義狀態圖的基本記號  展示狀態圖的建構  定義活動、內部事件及遞延事件的狀態 圖記號.
第12章 建立多表單與模組的應用程式 12-1 Visual Basic的方案與專案 12-2 模組化Visual Basic應用程式
CH.8 偵錯 Visual Basic CH.8 偵錯 Visual Basic  資三甲   章乃云 三種類型的錯誤 三種類型的錯誤.
行政院國家科學委員會工程技術發展處自動化學門 * 試以國立成功大學製造工程研究所 鄭芳田教授 產學合作計畫 : 智慧預測保養系統之設計與實作 成果報告盤點為範例 國科會工程處專題計畫成果典藏 自動化學門成果報告盤點範例.
第三章 自動再裝載運用篇 使用時機:裝載計劃完成時,尚有剩餘空 間的情形,維持已固定計劃而繼續做裝載 最佳化。以支持次日裝載計劃而提前調整 作業模式。 裝載物品設定和裝載容器設定如前兩章介 紹,於此不再重複此動作,直接從裝載計 劃設定開始,直接從系統內定的物品和容 器選取所需.
1 第 9 章 視窗應用程式的事件處理 9-1 事件的基礎 9-1 事件的基礎 9-2 表單事件 9-2 表單事件 9-3 滑鼠事件 9-3 滑鼠事件 9-4 鍵盤事件 9-4 鍵盤事件 9-5 表單的鍵盤事件 9-5 表單的鍵盤事件 9-6 控制項的事件 9-6 控制項的事件.
第 10 章 視窗應用程式的工具列與 功能表 10-1 主功能表控制項 10-1 主功能表控制項 10-2 快顯功能表控制項 10-2 快顯功能表控制項 10-3 工具列控制項 10-3 工具列控制項 10-4 狀態列控制項 10-4 狀態列控制項 10-5 字型與色彩對話方塊 10-5 字型與色彩對話方塊.
: Multisets and Sequences ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11023: Multisets and Sequences 解題者:葉貫中 解題日期: 2007 年 4 月 24 日 題意:在這個題目中,我們要定義.
:Nuts for nuts..Nuts for nuts.. ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 10944:Nuts for nuts.. 解題者:楊家豪 解題日期: 2006 年 2 月 題意: 給定兩個正整數 x,y.
資料結構實習-一 參數傳遞.
6-2 認識元件庫與內建元件庫 Flash 的元件庫分兩種, 一種是每個動畫專 屬的元件庫 (Library) ;另一種則是內建元 件庫 (Common Libraries), 兩者皆可透過 『視窗』功能表來開啟, 以下即為您說明。
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2008.
4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本
Management Abstracts Retrieval System; MARS 檢索操作.
4.1 Operating System Concepts 第四章 執行緒 Threads n 綜觀 n 多重執行緒模型 (Multithreading Models) n 執行緒的相關問題 n Pthreads n Solaris 2 Threads n Windows 2000 Threads n.
1 Web of Science 利用指引 逢甲大學圖書館 參考服務組 單元六 個人化服務.
Section 4.2 Probability Models 機率模式. 由實驗看機率 實驗前先列出所有可能的實驗結果。 – 擲銅板:正面或反面。 – 擲骰子: 1~6 點。 – 擲骰子兩顆: (1,1),(1,2),(1,3),… 等 36 種。 決定每一個可能的實驗結果發生機率。 – 實驗後所有的實驗結果整理得到。
Image Interpolation Use SSE 指導教授 : 楊士萱 學 生 : 楊宗峰 日 期 :
JAVA 程式設計與資料結構 第二十章 Searching. Sequential Searching Sequential Searching 是最簡單的一種搜尋法,此演 算法可應用在 Array 或是 Linked List 此等資料結構。 Sequential Searching 的 worst-case.
演算法 8-1 最大數及最小數找法 8-2 排序 8-3 二元搜尋法.
845: Gas Station Numbers ★★★ 題組: Problem Set Archive with Online Judge 題號: 845: Gas Station Numbers. 解題者:張維珊 解題日期: 2006 年 2 月 題意: 將輸入的數字,經過重新排列組合或旋轉數字,得到比原先的數字大,
第 17 章 樣板 17-1 樣板的基礎 17-1 樣板的基礎 17-2 樣板函數 17-2 樣板函數 17-3 樣板類別 17-3 樣板類別 17-4 非型態參數的樣板類別 17-4 非型態參數的樣板類別 17-5 樣板類別的繼承 17-5 樣板類別的繼承 17-6 特化樣板與靜態成員 17-6 特化樣板與靜態成員.
Chapter 10 m-way 搜尋樹與B-Tree
第12章 多重表單與模組的應用程式 12-1 VB.NET的方案與專案 12-2 模組化VB.NET應用程式 12-3 多重表單的應用程式
: Function Overloading ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11032:Function Overloading 解題者:許智祺 解題日期: 2007 年 5 月 8 日 題意:判對輸入之數字是否為.
演算法課程 (Algorithms) 國立聯合大學 資訊管理學系 陳士杰老師 Course 7 貪婪法則 Greedy Approach.
概念性產品企劃書 呂學儒 李政翰.
第 17 章 泛型類別與.NET Framework 17-1.NET Framework 類別函式庫 17-1.NET Framework 類別函式庫 17-2 使用.NET FCL 的類別 17-2 使用.NET FCL 的類別 17-3 My 名稱空間的類別 17-3 My 名稱空間的類別 17-4.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
INFORMATION RETRIEVAL AND EXTRACTION 作業: Program 1 第十四組 組員:林永峰、洪承雄、謝宗憲.
Teacher : Ing-Jer Huang TA : Chien-Hung Chen 2015/6/30 Course Embedded Systems : Principles and Implementations Weekly Preview Question CH7.1~CH /12/26.
著作權所有 © 旗標出版股份有限公司 第 3 章 資料庫物件的關係. 本章提要 Access 資料庫物件的關係 Access 資料庫物件的關係 簡介 Access 的七大物件 簡介 Access 的七大物件 Access 的群組 Access 的群組.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2010.
OmniFile Full Text 系列資料庫 個人化服務設定步驟. 此相關資料庫之個人化服 務只提供類似專題選粹的 服務,然無提供 mail 通知的 服務,讀者可建立個人 ID , 並儲存檢索策略,日後需 再進入該資料庫,查詢檢 索策略之新進文章。 導航目次 個人化服務說明 個人帳號密碼申請 個人化服務設定.
Microsoft Excel.
Introduction to Java Programming Lecture 16 Super and Sub Classes.
: Finding Paths in Grid ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11486: Finding Paths in Grid 解題者:李重儀 解題日期: 2008 年 10 月 14 日 題意:給一個 7 個 column.
著作權所有 © 旗標出版股份有限公司 第 14 章 製作信封、標籤. 本章提要 製作單一信封 製作單一郵寄標籤.
幼兒行為觀察與記錄 第八章 事件取樣法.
第 8 章 Web 伺服器檔案與資料 夾的操作 8-1 System.IO 名稱空間的基礎 8-2 伺服器的資料夾操作 8-3 伺服器的檔案操作 8-4 文字檔案的讀寫 8-5 文字檔案的搜尋和取代 8-6 二進位檔案的處理 8-7 文字檔案版的資料庫 8-8 文字檔案內容的編碼.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
McGraw-Hill/Irwin © 2003 The McGraw-Hill Companies, Inc.,All Rights Reserved. 肆 資料分析與表達.
Presentation transcript:

第 10 章 Java 的執行緒 10-1 執行緒的基礎 10-2 Java 執行緒的使用方法 10-3 Java 執行緒的同步 10-4 管道串流的執行緒

10-1 執行緒的基礎 Java 的執行緒 多工與多執行緒

Java 的執行緒 - 說明 「執行緒」( Thread ) 也稱為「輕量行程」 ( Lightweight Process ),其執行過程 類似上述程式執行,只 是執行緒不能單獨存在 或執行,一定需要隸屬 於一個程式,由程式啟 動執行緒,如右圖所示:

Java 的執行緒 - 多執行緒 如果程式碼本身沒有先 後依存關係,程式能夠 分割成多個同步執行緒 來一起執行,這種程式 設計方法稱為「平行程 式設計」( Parallel Programming ),如右 圖所示:

多工與多執行緒 目前的作業系統都強調「多工」 ( Multitasking )。例如:微軟的 Windows 作業系統屬於一套多工的作業系統,可以 同時執行小畫家、記事本和小算盤等多個 應用程式。 不同於作業系統的多工,「多執行緒」 ( Multithreaded )是指在單一應用程式擁 有多個執行流程。例如: Web 瀏覽程式可 以在下載網頁檔案的同時顯示動畫、播放 音樂或捲動視窗瀏覽網頁內容。

10-2 Java 執行緒的使用方法 實作 Runnable 介面 繼承 Thread 類別

10-2 Java 執行緒的使用方法 Java 執行緒是建立 Thread 類別的物件,一 共有 2 種方式建立多執行緒應用程式,如下 所示: 實作 Runnable 介面。 實作 Runnable 介面。 繼承 Thread 類別。 繼承 Thread 類別。

實作 Runnable 介面 - 架構 Swing 應用程式繼承自 JFrame , Java Applet 繼承自 JApplet ,就只能實作 Runnable 介面的 run() 方法來建立多執行緒 的應用程式,如下所示: class UserThread extends UserClass implements Runnable { public UserThread(int length) { } public UserThread(int length) { } public void run() { ……… } public void run() { ……… }}

實作 Runnable 介面 - 啟動 接著可以建立 Thread 物件和啟動執行緒, 如下所示: UserThread ut1 = new UserThread(5); Thread t1 = new Thread(ut1, " 執行緒 A"); t1.start(); 上述程式碼在建立好 UserThread 物件 ut1 後, 使用 ut1 物件建立 Thread 物件的執行緒,參 數字串是執行緒名稱,最後使用 start() 方法 啟動執行緒。

實作 Runnable 介面 - 建構子 Thread 類別的建構子,如下表所示:

實作 Runnable 介面 - 相關方法 Thread 類別的相關方法,如下表所示:

繼承 Thread 類別 - 架構 若類別沒有繼承其他類別,就可以直接繼 承 Thread 類別,然後覆寫 run() 方法建立執 行緒物件,如下所示: class UserThread extends Thread { public UserThread(int length, String name) { } public UserThread(int length, String name) { } public void run() { ……… } public void run() { ……… }}

繼承 Thread 類別 - 啟動 接著就可以建立 Thread 物件,啟動執行緒, 如下所示: UserThread ut1 = new UserThread(5, " 執行緒 A"); new UserThread(5, " 執行緒 A");ut1.start(); 上述程式碼在建立好 UserThread 物件 ut1 後, 這是 Thread 物件,所以可以直接使用 start() 方法啟動執行緒。

10-3 Java 執行緒的同步 - 說明 在第 10-2 節程式範例的執行緒間並沒有任 何關係,簡單的說,執行緒的目的只是為 了加速程式執行。另一種情況是執行緒間 擁有生產和消費者的關係或是同時存取相 同資源,當有此情況,就需要考量「同步」 ( Synchronization )問題。

10-3 Java 執行緒的同步 - 生產者和消 費者模型 生產者和消費者模型( Producer/Consumer Model ) 生產者和消費者模型是指一個執行緒產生資料, 稱為生產者,另一個執行緒讀取生產者產生的資 料,稱為消費者,產生的資料是儲存在共用的資 料儲存緩衝區稱為「佇列」( Queue ),這是一 種先進先出的資料結構,如下圖所示:

10-3 Java 執行緒的同步 - synchronized 關鍵字 synchronized 關鍵字 生產者和消費者是同步存取同一個資源物 件,所以存取的 enqueue() 和 dequeue() 方 法需要使用 synchronized 關鍵字鎖定資源, 稱為同步方法( Synchronized Method ), 如下所示: public synchronized void enqueue(int value) { …… } public synchronized int dequeue() { …… }

10-3 Java 執行緒的同步 -wait() 和 notify() 方法 ( 說明 ) wait() 和 notify() 方法 同步執行緒雖然使用 synchronized 關鍵子避 免同時存取相同物件,但是為了讓生產者 產生的資料有地方儲存,且消費者能夠取 得資料,有兩種情況需要特別處理,如下 所示: 佇列空了:如果佇列空了,消費者需要等待生 產者產生資料。 佇列空了:如果佇列空了,消費者需要等待生 產者產生資料。 佇列滿了:如果佇列滿了,表示已經沒有地方 儲存,生產者需要等待消費者讀取資料。 佇列滿了:如果佇列滿了,表示已經沒有地方 儲存,生產者需要等待消費者讀取資料。

10-3 Java 執行緒的同步 -wait() 和 notify() 方法 (enqueue() 方法 ) public synchronized void enqueue(int value) { try // 如果佇列已滿 { while ( queue.isFull() ) { while ( queue.isFull() ) { wait(); // 等待 wait(); // 等待 } } catch ( InterruptedException e ) { } catch ( InterruptedException e ) { } queue.enqueue(value); // 存入 queue.enqueue(value); // 存入 notify(); // 通知 dequeue() notify(); // 通知 dequeue()}

10-3 Java 執行緒的同步 -wait() 和 notify() 方法 (dequeue() 方法 ) public synchronized int dequeue() { try // 如果佇列已空 { while(queue.isEmpty()) { while(queue.isEmpty()) { wait(); // 等待 } { wait(); // 等待 } } catch ( InterruptedException e ) { } catch ( InterruptedException e ) { } int data = queue.dequeue(); // 取出 int data = queue.dequeue(); // 取出 notify(); // 通知 enqueue() notify(); // 通知 enqueue() return data; return data;}

10-3 Java 執行緒的同步 -wait() 和 notify() 方法 ( 相關方法 ) Object 類別的相關方法,如下表所示:

10-4 管道串流的執行緒 Java I/O 套件的 PipedInputStream 和 PipedOutputStream 管道串流類別是 InputStream 和 OutputStream 的子類別,能 夠建立類似第 10-3 節生產者和消費者模型 的 Java 應用程式。 PipedInputStream 和 PipedOutputStream 管 道串流類別能夠在一個執行緒產生資料寫 入 PipedOutputStream 串流物件,然後在另 一個執行緒從 PipedInputStream 串流物件 讀取資料。