




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、Java程序設計實用教程(第3版),第7章 多線程,7.1 操作系統(tǒng)中的進程與線程 7.2 Java的線程對象 7.3 線程的同步機制*,Java程序設計實用教程(第3版),7.1 操作系統(tǒng)中的進程與線程,7.1.1 進程 7.1.2 線程 7.1.3 并發(fā)程序設計,Java程序設計實用教程(第3版),7.1.1 進程,進程的定義和屬性 進程(process)是一個可并發(fā)執(zhí)行的具有獨立功能的程序(program)關于某個數(shù)據(jù)集合的一次執(zhí)行過程,也是操作系統(tǒng)進行資源分配和保護的基本單位。 結(jié)構(gòu)性 共享性 動態(tài)性 獨立性 并發(fā)性 制約性,進程的狀態(tài) 就緒(ready)態(tài) 運行(running)態(tài)
2、阻塞(blocked)態(tài),Java程序設計實用教程(第3版),7.1.2 線程,引入線程機制的動機和思路 線程的定義和屬性 線程(thread)是操作系統(tǒng)進程中能夠獨立執(zhí)行的實體(控制流),是處理器調(diào)度和分派的基本單位。 并發(fā)性 共享性 動態(tài)性 結(jié)構(gòu)性,Java程序設計實用教程(第3版),3. 線程的狀態(tài),4. 線程的并發(fā)性 5. 線程調(diào)度,7.1.2 線程,Java程序設計實用教程(第3版),7.1.3 并發(fā)程序設計,順序程序設計 執(zhí)行的順序性。 環(huán)境的封閉性。 執(zhí)行結(jié)果的確定性。 計算結(jié)果的可再現(xiàn)性。 并發(fā)程序設計,Java程序設計實用教程(第3版),7.2 Java的線程對象,7.2.1
3、 Runnable接口與Thread類 7.2.2 線程對象的生命周期 7.2.3 線程對象的優(yōu)先級 7.2.4 守護線程 7.2.5 定時器與圖形動畫設計,Java程序設計實用教程(第3版),7.2.1 Runnable接口與Thread類,Runnable接口 public interface Runnable public abstract void run(); ,Java程序設計實用教程(第3版),2. Thread線程類,public class Thread extends Object implements Runnable public Thread() /構(gòu)造方法 publ
4、ic Thread(String name) /name指定線程名 public Thread(Runnable target) /target指定線程的目標對象 public Thread(Runnable target, String name) public void run() /描述線程操作的線程體 public final String getName() /返回線程名 public final void setName(String name) /設置線程名 public static int activeCount() /返回當前活動線程個數(shù) public static Thr
5、ead currentThread() /返回當前執(zhí)行線程對象 public Sting toString() /返回線程的字符串信息 public void start() /啟動已創(chuàng)建的線程對象 ,7.2.1 Runnable接口與Thread類,Java程序設計實用教程(第3版),【例7.1】 聲明繼承Thread類的奇數(shù)/偶數(shù)序列線程。,main是首先啟動執(zhí)行的線程 兩個線程交替運行,Java程序設計實用教程(第3版),【例7.2】 實現(xiàn)Runnable接口的奇數(shù)/偶數(shù)序列線程。,Thread類的run()方法聲明如下: public void run() /描述線程操作的線程體 if
6、 (target != null) target.run(); /執(zhí)行目標對象的run()方法 Thread t1 = new Thread(); /t1的run()方法為空 Thread thread_odd = new Thread(odd,奇數(shù)線程); /thread_odd實際執(zhí)行odd的run()方法,Java程序設計實用教程(第3版),3. 兩種創(chuàng)建線程方式的比較,(1) 繼承線程Thread類 (2) 實現(xiàn)Runnable接口,7.2.1 Runnable接口與Thread類,Java程序設計實用教程(第3版),7.2.2 線程對象的生命周期,Thread.State類聲明的線程
7、狀態(tài) 新建態(tài)、運行態(tài)、阻塞態(tài)和等待態(tài)、終止態(tài),Java程序設計實用教程(第3版),2. Thread類中改變和判斷線程狀態(tài)的方法,(1)線程啟動 public void start() /啟動線程對象 public final boolean isAlive() /是否啟動 (2)線程睡眠 public static void sleep(long millis) throws InterruptedException (3)線程中斷 public void interrupt() /設置中斷標記 public boolean isInterrupted() /判斷是否中斷 public st
8、atic boolean interrupted() /判斷是否中斷,Java程序設計實用教程(第3版),【例7.3】 設計滾動字演示線程狀態(tài)及改變方法。,本例演示線程對象的生命周期從創(chuàng)建到終止的過程,期間使用new、start()、sleep()、interrupt()等方法改變線程的狀態(tài)。本例綜合運用內(nèi)部類、圖形用戶界面、線程等多方面技術實現(xiàn)設計思想。 聲明自定義面板類為私有內(nèi)部類并實現(xiàn)多個接口 對象嵌套 線程狀態(tài)變化,Java程序設計實用教程(第3版),7.2.3 線程對象的優(yōu)先級,Thread類中聲明了3個表示優(yōu)先級的公有靜態(tài)常量: public static final int MI
9、N_PRIORITY=1 /最低優(yōu)先級 public static final int MAX_PRIORITY=10 /最高優(yōu)先級 public static final int NORM_PRIORITY=5 /默認優(yōu)先級 Thread類中與線程優(yōu)先級有關的方法有以下2個: public final int getPriority() /獲得線程優(yōu)先級 public final void setPriority(int newPriority)/設置線程優(yōu)先級,Java程序設計實用教程(第3版),7.2.4 守護線程,public final void setDaemon(boolean
10、on) /設置守護線程 public final boolean isDaemon() /判斷是否為守護線程,Java程序設計實用教程(第3版),7.2.5 定時器與圖形動畫設計,public class Timer implements Serializable public Timer(int delay, ActionListener l) public void addActionListener(ActionListener l) /注冊定時事件監(jiān)聽器 public void setDelay(int delay) /設置延時的時間間隔 public void start() /啟動
11、定時器 public void stop() /停止定時器 public void restart() /重新啟動定時器 【例7.4】 彈彈球,使用定時器實現(xiàn)圖形動畫。,Java程序設計實用教程(第3版),7.3 線程的同步機制,7.3.1 交互線程 7.3.2 線程間的競爭關系與線程互斥 7.3.3 線程間的協(xié)作關系與線程同步,Java程序設計實用教程(第3版),7.3.1 交互線程,無關線程與交互線程 并發(fā)執(zhí)行的交互線程間存在與時間有關的錯誤,Java程序設計實用教程(第3版),【例7.5】 銀行賬戶的存/取款線程設計。,圖7.7 并發(fā)線程共享臨界資源 運行結(jié)果不惟一,取決于線程調(diào)度 線程
12、執(zhí)行被打斷時出現(xiàn)錯誤,Java程序設計實用教程(第3版),7.3.2 線程間的競爭關系與線程互斥,線程間的競爭關系 被阻塞線程永遠得不到訪問權(quán),出現(xiàn)兩個問題:死鎖、饑餓。,Java程序設計實用教程(第3版),2. 線程互斥和臨界區(qū)管理,操作系統(tǒng)對共享一個變量的若干線程進入各自臨界區(qū)有以下3個調(diào)度原則: 一次至多一個線程能夠在它的臨界區(qū)內(nèi)。 不能讓一個線程無限地留在它的臨界區(qū)內(nèi)。 不能強迫一個線程無限地等待進入它的臨界區(qū)。特別地,進入臨界區(qū)的任一線程不能妨礙正等待進入的其他線程的進展。,Java程序設計實用教程(第3版),3. Java的線程互斥實現(xiàn),同步語句 synchronized (對象)
13、 語句 同步方法 synchronized 方法聲明,Java程序設計實用教程(第3版),【例7.6】 互斥的存/取款線程設計。,圖7.9 帶互斥鎖的并發(fā)線程執(zhí)行流程,Java程序設計實用教程(第3版),7.3.3 線程間的協(xié)作關系與線程同步,線程間的協(xié)作關系 【例7.7】 發(fā)送線程與接收線程。,2. 線程同步,線程同步機制 背景 設置信號量 線程根據(jù)信號量狀態(tài)而執(zhí)行,Java程序設計實用教程(第3版),Java的線程通信方法 public final void wait() throws InterruptedException /等待 public final native void notify(); /喚醒一個等待線程 public final native void notifyAll(); /喚醒所有等待線程,7.3.3 線程間的協(xié)作關系與線程同步,Java程序設計實用教程(第3版),【例7.8】 采用信號量和同步方法使發(fā)送線程與接收線程同步運行。,圖7.11 發(fā)送線程與接收線程同步執(zhí)行流程,Java程序設計實用教程(第3版),【例7.9】 發(fā)牌程序。,圖7.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC 60332-1-2:2025 EN Tests on electric and optical fibre cables under fire conditions - Part 1-2: Test for vertical flame propagation for a single insulated wire or cable -
- 2025至2030中國電視劇行業(yè)市場發(fā)展分析及前景預測與戰(zhàn)略規(guī)劃報告
- 2025至2030中國電動自行車燈行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國甲氧基乙酸甲酯行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國玉米種子市場投資風險與需求多樣化趨勢報告
- 2025至2030中國特氟龍膨脹密封膠行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 教育心理學與商業(yè)培訓的有機結(jié)合
- 藥庫培訓課件圖片模板
- 目標選才培訓課件
- 母嬰護理能力培訓課件
- 【課件】跨學科實踐:為家庭電路做設計+2025-2026學年人教版物理九年級上學期
- 2025屆中考數(shù)學全真模擬卷 【河北專用】及答案
- 廣告法法律培訓課件
- 2025至2030中國高阻隔膜市場供需狀況與重點企業(yè)經(jīng)營分析報告
- 鋼鐵超低排放改造評估報告
- 剪刀升降車安全教育培訓
- 彩繪臉部兒童課件
- 員工帶小孩管理制度
- 衛(wèi)生法律法規(guī)典型案例解析
- 2025年目標管理實施與評估考試試卷及答案
- 2025年交通基礎設施建設投融資模式創(chuàng)新與政策解讀
評論
0/150
提交評論