葉核亞編《JAVA程序設(shè)計(jì)實(shí)用教程》多線程_第1頁(yè)
葉核亞編《JAVA程序設(shè)計(jì)實(shí)用教程》多線程_第2頁(yè)
葉核亞編《JAVA程序設(shè)計(jì)實(shí)用教程》多線程_第3頁(yè)
葉核亞編《JAVA程序設(shè)計(jì)實(shí)用教程》多線程_第4頁(yè)
葉核亞編《JAVA程序設(shè)計(jì)實(shí)用教程》多線程_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論