版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java程序設(shè)計(jì)實(shí)用教程(第4版)第第7章章 多線程多線程 7.1 操作系統(tǒng)中的進(jìn)程與線程操作系統(tǒng)中的進(jìn)程與線程 7.2 Java的線程對(duì)象的線程對(duì)象 7.3 線程的同步機(jī)制線程的同步機(jī)制Java程序設(shè)計(jì)實(shí)用教程(第4版)第第7章章 多線程多線程內(nèi)容和要求:內(nèi)容和要求:1. 理解進(jìn)程與線程概念,掌握創(chuàng)建、管理和控理解進(jìn)程與線程概念,掌握創(chuàng)建、管理和控制制Java線程對(duì)象的方法。線程對(duì)象的方法。2. 了解并發(fā)執(zhí)行的多線程間存在的各種關(guān)系,了解并發(fā)執(zhí)行的多線程間存在的各種關(guān)系,掌握實(shí)現(xiàn)線程互斥和線程同步方法。掌握實(shí)現(xiàn)線程互斥和線程同步方法。重點(diǎn):重點(diǎn):創(chuàng)建創(chuàng)建Java線程對(duì)象,改變線程狀態(tài),設(shè)線程
2、對(duì)象,改變線程狀態(tài),設(shè)置線程優(yōu)先級(jí)以控制線程調(diào)度。置線程優(yōu)先級(jí)以控制線程調(diào)度。難點(diǎn):難點(diǎn):線程互斥,線程同步。線程互斥,線程同步。Java程序設(shè)計(jì)實(shí)用教程(第4版)7.1 操作系統(tǒng)中的進(jìn)程與線程操作系統(tǒng)中的進(jìn)程與線程n7.1.1 進(jìn)程進(jìn)程n7.1.2 線程線程n7.1.3 并發(fā)程序設(shè)計(jì)并發(fā)程序設(shè)計(jì)Java程序設(shè)計(jì)實(shí)用教程(第4版)7.1.1 進(jìn)程進(jìn)程1.進(jìn)程的定義和屬性進(jìn)程的定義和屬性進(jìn)程(進(jìn)程(process)是一個(gè)可并發(fā)執(zhí)行的具有獨(dú)立功能的程序)是一個(gè)可并發(fā)執(zhí)行的具有獨(dú)立功能的程序(program)關(guān)于某個(gè)數(shù)據(jù)集合的一次執(zhí)行過(guò)程,也是操作系)關(guān)于某個(gè)數(shù)據(jù)集合的一次執(zhí)行過(guò)程,也是操作系統(tǒng)進(jìn)行
3、資源分配和保護(hù)的基本單位。統(tǒng)進(jìn)行資源分配和保護(hù)的基本單位。 結(jié)構(gòu)性結(jié)構(gòu)性共享性共享性動(dòng)態(tài)性動(dòng)態(tài)性獨(dú)立性獨(dú)立性并發(fā)性并發(fā)性制約性制約性 1.進(jìn)程的狀態(tài)進(jìn)程的狀態(tài)就緒(就緒(ready)態(tài))態(tài)運(yùn)行(運(yùn)行(running)態(tài))態(tài)阻塞(阻塞(blocked)態(tài))態(tài) Java程序設(shè)計(jì)實(shí)用教程(第4版)7.1.2 線程線程1.引入線程機(jī)制的動(dòng)機(jī)和思路引入線程機(jī)制的動(dòng)機(jī)和思路2.線程的定義和屬性線程的定義和屬性線程(線程(thread)是操作系統(tǒng)進(jìn)程中能夠獨(dú)立)是操作系統(tǒng)進(jìn)程中能夠獨(dú)立執(zhí)行的實(shí)體(控制流),是處理器調(diào)度和執(zhí)行的實(shí)體(控制流),是處理器調(diào)度和分派的基本單位。分派的基本單位。 并發(fā)性并發(fā)性共享性
4、共享性動(dòng)態(tài)性動(dòng)態(tài)性結(jié)構(gòu)性結(jié)構(gòu)性Java程序設(shè)計(jì)實(shí)用教程(第4版) 3. 線程的狀態(tài)線程的狀態(tài) 4.線程的并發(fā)性線程的并發(fā)性5.線程調(diào)度線程調(diào)度Java程序設(shè)計(jì)實(shí)用教程(第4版)7.1.3 并發(fā)程序設(shè)計(jì)并發(fā)程序設(shè)計(jì)1.順序程序設(shè)計(jì)順序程序設(shè)計(jì)執(zhí)行的順序性。執(zhí)行的順序性。環(huán)境的封閉性。環(huán)境的封閉性。執(zhí)行結(jié)果的確定性。執(zhí)行結(jié)果的確定性。計(jì)算結(jié)果的可再現(xiàn)性。計(jì)算結(jié)果的可再現(xiàn)性。2.并發(fā)程序設(shè)計(jì)并發(fā)程序設(shè)計(jì)Java程序設(shè)計(jì)實(shí)用教程(第4版)7.2 Java的線程對(duì)象的線程對(duì)象n7.2.1 Runnable接口與接口與Thread類(lèi)類(lèi)n7.2.2 線程對(duì)象的優(yōu)先級(jí)線程對(duì)象的優(yōu)先級(jí)n7.2.3 線程對(duì)象的生
5、命周期線程對(duì)象的生命周期n7.2.4 定時(shí)器與圖形動(dòng)畫(huà)設(shè)計(jì)定時(shí)器與圖形動(dòng)畫(huà)設(shè)計(jì)Java程序設(shè)計(jì)實(shí)用教程(第4版)7.2.1 Runnable接口與接口與Thread類(lèi)類(lèi)1.Runnable接口接口public interface Runnable public abstract void run();Java程序設(shè)計(jì)實(shí)用教程(第4版)2. Thread線程類(lèi)線程類(lèi)public class Thread extends Object implements Runnable public Thread() /構(gòu)造方法構(gòu)造方法 public Thread(String name) /name指定線程
6、名指定線程名 public Thread(Runnable target) /target指定線程的目標(biāo)對(duì)象指定線程的目標(biāo)對(duì)象 public Thread(Runnable target, String name) public void run() /描述線程操作的線程體描述線程操作的線程體 public final String getName() /返回線程名返回線程名 public final void setName(String name) /設(shè)置線程名設(shè)置線程名 public static int activeCount() /返回當(dāng)前活動(dòng)線程個(gè)數(shù)返回當(dāng)前活動(dòng)線程個(gè)數(shù) publi
7、c static Thread currentThread() /返回當(dāng)前執(zhí)行線程對(duì)象返回當(dāng)前執(zhí)行線程對(duì)象 public Sting toString() /返回線程的字符串信息返回線程的字符串信息 public void start() /啟動(dòng)已創(chuàng)建的線程對(duì)象啟動(dòng)已創(chuàng)建的線程對(duì)象Java程序設(shè)計(jì)實(shí)用教程(第4版)【例例7.1】 聲明繼承聲明繼承Thread類(lèi)類(lèi)的奇數(shù)的奇數(shù)/偶數(shù)序列線程。偶數(shù)序列線程。1.main是首先啟動(dòng)執(zhí)行的線程是首先啟動(dòng)執(zhí)行的線程2.兩個(gè)線程交替運(yùn)行兩個(gè)線程交替運(yùn)行Java程序設(shè)計(jì)實(shí)用教程(第4版)【例例7.2】 聲明實(shí)現(xiàn)聲明實(shí)現(xiàn)Runnable接接口的奇數(shù)口的奇數(shù)/偶
8、數(shù)序列線程。偶數(shù)序列線程。Thread類(lèi)的類(lèi)的run()方法聲明如下:方法聲明如下:public void run() /描述線程操作的線程體描述線程操作的線程體 if (target != null) target.run(); /執(zhí)行目標(biāo)對(duì)象的執(zhí)行目標(biāo)對(duì)象的run()方法方法Thread t1 = new Thread(); /t1的的run()方法為空方法為空Thread thread_odd = new Thread(target ,奇數(shù)線程奇數(shù)線程); /thread_odd實(shí)際執(zhí)行實(shí)際執(zhí)行target的的run()方法方法Java程序設(shè)計(jì)實(shí)用教程(第4版)3. 兩種創(chuàng)建線程方式的比
9、較兩種創(chuàng)建線程方式的比較(1) 繼承線程繼承線程Thread類(lèi)類(lèi)public class NumberThread extends Thread(2) 實(shí)現(xiàn)實(shí)現(xiàn)Runnable接口接口public class NumberRunnable implements RunnableJava程序設(shè)計(jì)實(shí)用教程(第4版)7.2.2 線程對(duì)象的優(yōu)先級(jí)線程對(duì)象的優(yōu)先級(jí)1.Thread類(lèi)中聲明了類(lèi)中聲明了3個(gè)表示優(yōu)先級(jí)的公有靜態(tài)常量:個(gè)表示優(yōu)先級(jí)的公有靜態(tài)常量:public static final int MIN_PRIORITY=1 /最低優(yōu)先級(jí)最低優(yōu)先級(jí)public static final int M
10、AX_PRIORITY=10 /最高優(yōu)先級(jí)最高優(yōu)先級(jí)public static final int NORM_PRIORITY=5 /默認(rèn)優(yōu)先級(jí)默認(rèn)優(yōu)先級(jí)2.Thread類(lèi)中與線程優(yōu)先級(jí)有關(guān)的方法有以下類(lèi)中與線程優(yōu)先級(jí)有關(guān)的方法有以下2個(gè):個(gè):public final int getPriority() /獲得線程優(yōu)先級(jí)獲得線程優(yōu)先級(jí)public final void setPriority(int newPriority)/設(shè)置線程優(yōu)先級(jí)設(shè)置線程優(yōu)先級(jí)Java程序設(shè)計(jì)實(shí)用教程(第4版)7.2.3 線程對(duì)象的生命周期線程對(duì)象的生命周期1.Thread.State類(lèi)聲明的線程狀態(tài)類(lèi)聲明的線程狀態(tài)
11、新建態(tài)、運(yùn)行態(tài)、阻塞態(tài)和等待態(tài)、終止態(tài)新建態(tài)、運(yùn)行態(tài)、阻塞態(tài)和等待態(tài)、終止態(tài) Java程序設(shè)計(jì)實(shí)用教程(第4版)2. Thread類(lèi)中改變和判斷線程狀態(tài)的方法類(lèi)中改變和判斷線程狀態(tài)的方法1.線程啟動(dòng)線程啟動(dòng)public void start() /啟動(dòng)線程對(duì)象啟動(dòng)線程對(duì)象public final boolean isAlive() /是否活動(dòng)狀態(tài)是否活動(dòng)狀態(tài) 2.線程睡眠線程睡眠public static void sleep(long millis) throws InterruptedException3.線程中斷線程中斷public void interrupt() /設(shè)置中斷標(biāo)記設(shè)置中
12、斷標(biāo)記public boolean isInterrupted() /判斷是否中斷判斷是否中斷Java程序設(shè)計(jì)實(shí)用教程(第4版)【例例7.3】 設(shè)計(jì)滾動(dòng)字演示線程狀態(tài)及改設(shè)計(jì)滾動(dòng)字演示線程狀態(tài)及改變方法。變方法。本例演示線程對(duì)象的生命周期從創(chuàng)建到終止的過(guò)本例演示線程對(duì)象的生命周期從創(chuàng)建到終止的過(guò)程,期間使用程,期間使用new、start()、sleep()、interrupt()等方法改變線程的狀態(tài)。本例綜合運(yùn)用內(nèi)部類(lèi)、圖形等方法改變線程的狀態(tài)。本例綜合運(yùn)用內(nèi)部類(lèi)、圖形用戶界面、線程等多方面技術(shù)實(shí)現(xiàn)設(shè)計(jì)思想。用戶界面、線程等多方面技術(shù)實(shí)現(xiàn)設(shè)計(jì)思想。 1.聲明自定義面板類(lèi)為私有內(nèi)部類(lèi)并實(shí)現(xiàn)多個(gè)接
13、口聲明自定義面板類(lèi)為私有內(nèi)部類(lèi)并實(shí)現(xiàn)多個(gè)接口對(duì)象嵌套對(duì)象嵌套2.線程狀態(tài)變化線程狀態(tài)變化Java程序設(shè)計(jì)實(shí)用教程(第4版)7.2.4 定時(shí)器與圖形動(dòng)畫(huà)設(shè)計(jì)定時(shí)器與圖形動(dòng)畫(huà)設(shè)計(jì)public class Timer implements Serializable public Timer(int delay, ActionListener l) public void addActionListener(ActionListener l) /注冊(cè)定時(shí)事件監(jiān)聽(tīng)器注冊(cè)定時(shí)事件監(jiān)聽(tīng)器 public void setDelay(int delay) /設(shè)置延時(shí)的時(shí)間間隔設(shè)置延時(shí)的時(shí)間間隔 public v
14、oid start() /啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器 public void stop() /停止定時(shí)器停止定時(shí)器 public void restart() /重新啟動(dòng)定時(shí)器重新啟動(dòng)定時(shí)器【例例7.4】 彈彈球,使用定時(shí)器實(shí)現(xiàn)圖形動(dòng)畫(huà)。彈彈球,使用定時(shí)器實(shí)現(xiàn)圖形動(dòng)畫(huà)。Java程序設(shè)計(jì)實(shí)用教程(第4版)7.3 線程的同步機(jī)制線程的同步機(jī)制n7.3.1 交互線程交互線程n7.3.2 線程間的競(jìng)爭(zhēng)關(guān)系與線程互斥線程間的競(jìng)爭(zhēng)關(guān)系與線程互斥n7.3.3 線程間的協(xié)作關(guān)系與線程同步線程間的協(xié)作關(guān)系與線程同步Java程序設(shè)計(jì)實(shí)用教程(第4版)7.3.1 交互線程交互線程1.無(wú)關(guān)線程與交互線程無(wú)關(guān)線程與交互線程無(wú)
15、關(guān)的并發(fā)線程是指它們分別在不同的變量集合上無(wú)關(guān)的并發(fā)線程是指它們分別在不同的變量集合上操作。操作。 交互交互的并發(fā)線程是指它們共享某些變量。的并發(fā)線程是指它們共享某些變量。 2.并發(fā)執(zhí)行的交互線程間存在與時(shí)間有關(guān)的錯(cuò)并發(fā)執(zhí)行的交互線程間存在與時(shí)間有關(guān)的錯(cuò)誤誤Java程序設(shè)計(jì)實(shí)用教程(第4版)【例例7.5】 銀行賬戶的存銀行賬戶的存/取款線取款線程設(shè)計(jì)。程設(shè)計(jì)。圖圖7.7 并發(fā)線程共享臨界資源并發(fā)線程共享臨界資源 n運(yùn)行結(jié)果不惟一,取決于線程調(diào)度運(yùn)行結(jié)果不惟一,取決于線程調(diào)度n線程執(zhí)行被打斷時(shí)出現(xiàn)錯(cuò)誤線程執(zhí)行被打斷時(shí)出現(xiàn)錯(cuò)誤Java程序設(shè)計(jì)實(shí)用教程(第4版)7.3.2 線程間的競(jìng)爭(zhēng)關(guān)系與線程互斥
16、線程間的競(jìng)爭(zhēng)關(guān)系與線程互斥1.線程間的競(jìng)爭(zhēng)關(guān)系線程間的競(jìng)爭(zhēng)關(guān)系被阻塞線程永遠(yuǎn)得不到訪問(wèn)權(quán),出現(xiàn)兩個(gè)問(wèn)題:被阻塞線程永遠(yuǎn)得不到訪問(wèn)權(quán),出現(xiàn)兩個(gè)問(wèn)題:死鎖、饑餓。死鎖、饑餓。 Java程序設(shè)計(jì)實(shí)用教程(第4版)2. 線程互斥和臨界區(qū)管理線程互斥和臨界區(qū)管理操作系統(tǒng)對(duì)共享一個(gè)變量的若干線程進(jìn)入各自操作系統(tǒng)對(duì)共享一個(gè)變量的若干線程進(jìn)入各自臨界區(qū)有以下臨界區(qū)有以下3個(gè)調(diào)度原則:個(gè)調(diào)度原則:一次至多一個(gè)線程能夠在它的臨界區(qū)內(nèi)。一次至多一個(gè)線程能夠在它的臨界區(qū)內(nèi)。不能讓一個(gè)線程無(wú)限地留在它的臨界區(qū)內(nèi)。不能讓一個(gè)線程無(wú)限地留在它的臨界區(qū)內(nèi)。不能強(qiáng)迫一個(gè)線程無(wú)限地等待進(jìn)入它的臨界區(qū)。不能強(qiáng)迫一個(gè)線程無(wú)限地等待進(jìn)
17、入它的臨界區(qū)。特別地,進(jìn)入臨界區(qū)的任一線程不能妨礙正等特別地,進(jìn)入臨界區(qū)的任一線程不能妨礙正等待進(jìn)入的其他線程的進(jìn)展。待進(jìn)入的其他線程的進(jìn)展。Java程序設(shè)計(jì)實(shí)用教程(第4版)3. Java的線程互斥實(shí)現(xiàn)的線程互斥實(shí)現(xiàn)1.同步語(yǔ)句同步語(yǔ)句synchronized (對(duì)象對(duì)象) 語(yǔ)句語(yǔ)句2.同步方法同步方法synchronized 方法聲明方法聲明Java程序設(shè)計(jì)實(shí)用教程(第4版)【例例7.6】 互斥的存互斥的存/取款線程設(shè)計(jì)。取款線程設(shè)計(jì)。圖圖7.9 帶互斥鎖的并發(fā)線程執(zhí)行流程帶互斥鎖的并發(fā)線程執(zhí)行流程 Java程序設(shè)計(jì)實(shí)用教程(第4版)7.3.3 線程間的協(xié)作關(guān)系與線程同步線程間的協(xié)作關(guān)系與
18、線程同步1.線程間的協(xié)作關(guān)系線程間的協(xié)作關(guān)系【例例7.7】 發(fā)送線程與接收線程。發(fā)送線程與接收線程。Java程序設(shè)計(jì)實(shí)用教程(第4版)2. 線程同步線程同步4.Java的線程通信方法的線程通信方法public final void wait() throws InterruptedException /等待等待public final native void notify(); /喚醒一個(gè)等待線程喚醒一個(gè)等待線程public final native void notifyAll(); /喚醒所有等待線程喚醒所有等待線程1.線程同步機(jī)制線程同步機(jī)制背景背景設(shè)置信號(hào)量設(shè)置信號(hào)量線程根據(jù)信號(hào)量狀態(tài)而執(zhí)行線程根據(jù)信號(hào)量狀態(tài)而執(zhí)行Java程序設(shè)計(jì)實(shí)用教程(第4版)【例例7.8】 采用信號(hào)量和同步方法使發(fā)送采用信號(hào)量和同步方法使發(fā)送線程與接收線程同步運(yùn)行。線程與接收線程同步運(yùn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 無(wú)人駕駛技術(shù)研發(fā)招投標(biāo)文件
- 人才公寓物業(yè)公司招標(biāo)公告
- 信息技術(shù)意見(jiàn)箱管理
- 生態(tài)園林景觀基礎(chǔ)設(shè)施施工合同
- 零售設(shè)備維護(hù)
- 大型機(jī)械制造起重機(jī)施工合同
- 2025版杭州汽車(chē)租賃合同與杭州民宿租賃管理協(xié)議3篇
- 2025軟件產(chǎn)品銷(xiāo)售合同書(shū)
- 體育館環(huán)境衛(wèi)生工招聘合同
- 2025年鋼構(gòu)加工與安裝技術(shù)指導(dǎo)合同3篇
- 專(zhuān)題19 詩(shī)詞鑒賞(考點(diǎn)精講)-【中職專(zhuān)用】中職高考語(yǔ)文一輪復(fù)習(xí)講練測(cè)(四川適用)
- 2024北京大興區(qū)初三(上)期末化學(xué)試卷及答案
- 推土機(jī)-推土機(jī)構(gòu)造與原理
- 國(guó)家開(kāi)放大學(xué)2023年7月期末統(tǒng)一試《22064管理學(xué)基礎(chǔ)》試題及答案-開(kāi)放專(zhuān)科
- 生物制藥行業(yè)的經(jīng)營(yíng)管理制度
- 臥式單面多軸鉆孔組合機(jī)床動(dòng)力滑臺(tái)液壓系統(tǒng)
- Pcr室危險(xiǎn)評(píng)估報(bào)告
- 鋼結(jié)構(gòu)工程實(shí)測(cè)實(shí)量
- 國(guó)開(kāi)2023法律職業(yè)倫理-形考冊(cè)答案
- 醫(yī)院物業(yè)服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 排水管網(wǎng)清淤疏通方案(技術(shù)方案)
評(píng)論
0/150
提交評(píng)論