




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JAVA高級(jí)編程高級(jí)編程多線程多線程-1目標(biāo)目標(biāo)了解進(jìn)程與線程的概念了解使用多進(jìn)程與多線程的優(yōu)點(diǎn)掌握如何創(chuàng)建線程線程應(yīng)用舉例了解線程的各狀態(tài)進(jìn)程與多進(jìn)程進(jìn)程與多進(jìn)程n進(jìn)程的定義進(jìn)程(Process)是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。程序只是一組指令的有序集合,它本身沒(méi)有任何運(yùn)行的含義,只是一個(gè)靜態(tài)實(shí)體。而進(jìn)程則不同,它是程序在某個(gè)數(shù)據(jù)集上的執(zhí)行,是一個(gè)動(dòng)態(tài)實(shí)體。它因創(chuàng)建而產(chǎn)生,因調(diào)度而運(yùn)行,因等待資源或事件而被處于等待狀態(tài),因完成任務(wù)而被撤消,反映了一個(gè)程序在一定的數(shù)據(jù)集上運(yùn)行的全部動(dòng)態(tài)過(guò)程。當(dāng)你運(yùn)行一個(gè)程序,你就啟動(dòng)了一個(gè)進(jìn)程。
2、 例如:當(dāng)你打開(kāi)一個(gè)word文檔時(shí)將會(huì)啟動(dòng)一個(gè)進(jìn)程,在任務(wù)管理器中你可以看到一個(gè)映像名稱(chēng)為WINWORD.EXE進(jìn)程以及該進(jìn)程所包含的線程個(gè)數(shù),CPU和內(nèi)存占用數(shù)。進(jìn)程與多進(jìn)程進(jìn)程與多進(jìn)程n進(jìn)程同程序的差別:1. 進(jìn)程是程序的執(zhí)行,屬于動(dòng)態(tài),程序是完成某個(gè)功能的指令的集合,是靜態(tài)的2.進(jìn)程的存在是暫時(shí)的,程序的存在是永久的。3. 進(jìn)程程序數(shù)據(jù)PCB (進(jìn)程控制塊,process control block),即進(jìn)程是一個(gè)程序及其數(shù)據(jù)在處理機(jī)上順序地執(zhí)行時(shí)所發(fā)生的活動(dòng)。4. 一個(gè)程序可以對(duì)應(yīng)多個(gè)進(jìn)程進(jìn)程與多進(jìn)程進(jìn)程與多進(jìn)程進(jìn)程的特征: 進(jìn)程是一個(gè)能獨(dú)立運(yùn)行的單位,能與其它進(jìn)程并行地活動(dòng)。 進(jìn)程是
3、競(jìng)爭(zhēng)計(jì)算機(jī)系統(tǒng)有限資源的基本單位,是一個(gè)可調(diào)度的實(shí)體。也是進(jìn)行處理機(jī)調(diào)度的基本單位。 進(jìn)程是操作系統(tǒng)進(jìn)行資源分配的單位。進(jìn)程是擁有自己資源的單元體。進(jìn)程與多進(jìn)程進(jìn)程與多進(jìn)程進(jìn)程的狀態(tài)及變化1.進(jìn)程有著“ 執(zhí)行暫停執(zhí)行 ” 的活動(dòng)規(guī)律,一般說(shuō)來(lái)一個(gè)進(jìn)程不是自始至終一口氣運(yùn)行到底的。2.各進(jìn)程相互制約,當(dāng)使它暫停的原因消失后,它又可準(zhǔn)備運(yùn)行。因此進(jìn)程有多種狀態(tài)。1.1. 三種基本狀態(tài):三種基本狀態(tài):(1) 運(yùn)行狀態(tài) (Running) 當(dāng)一個(gè)進(jìn)程正在處理機(jī)上運(yùn)行時(shí),稱(chēng)為運(yùn)行狀態(tài)。(2) 就緒狀態(tài) (Ready) 一個(gè)進(jìn)程獲得了除處理機(jī)外的一切所需資源,一旦得到處理機(jī)即可運(yùn)行,稱(chēng)此進(jìn)程處于就緒狀態(tài)。
4、(3) 等待狀態(tài) (Blocked) 一個(gè)進(jìn)程正在等待某一事件發(fā)生而暫時(shí)停止運(yùn)行,即使這時(shí)把處理機(jī)分配給此進(jìn)程也無(wú)法運(yùn)行。又稱(chēng)為阻塞狀態(tài)。進(jìn)程的狀態(tài)進(jìn)程的狀態(tài)RunningReadyBlocked等待事件 (系統(tǒng)服務(wù)請(qǐng)求,如請(qǐng)求I/O) 被調(diào)度或分派 時(shí)間片用完 事件發(fā)生注:處理機(jī)的數(shù)目一般總是少于進(jìn)程數(shù),在單處理機(jī)系統(tǒng)中,只有一個(gè)進(jìn)程可真正獲得處理。進(jìn)程在系統(tǒng)中,其狀態(tài)可以變化,各狀態(tài)間變化如下圖所示:進(jìn)程狀態(tài)的變化進(jìn)程狀態(tài)的變化n狀態(tài)間轉(zhuǎn)換說(shuō)明: 就緒狀態(tài)的進(jìn)程被進(jìn)程調(diào)度程序選中后,就分配到處理機(jī)來(lái)運(yùn)行,進(jìn)入運(yùn)行狀態(tài)。 運(yùn)行狀態(tài)的進(jìn)程時(shí)間片用完不得不讓出處理機(jī),變?yōu)榫途w狀態(tài)。 運(yùn)行狀態(tài)的進(jìn)
5、程需等待某一事件發(fā)生后,才能繼續(xù)運(yùn)行,變?yōu)榈却隣顟B(tài)。 等待狀態(tài)的進(jìn)程:若其等待的事件已發(fā)生,變?yōu)榫途w狀態(tài)。進(jìn)程狀態(tài)的變化進(jìn)程狀態(tài)的變化線程與多線程線程與多線程n線程的定義線程是進(jìn)程內(nèi)一個(gè)相對(duì)獨(dú)立的、可調(diào)度的執(zhí)行單元。在一個(gè)進(jìn)程內(nèi)部可以有多個(gè)線程,即有多個(gè)執(zhí)行流,這多個(gè)線程是共享進(jìn)程的內(nèi)存空間和系統(tǒng)資源。它們輪換使用這塊內(nèi)存空間。多線程是為了使得多個(gè)線程并行的工作以完成多項(xiàng)任務(wù),以提高系統(tǒng)的效率。 根據(jù)線程定義可知線程有以下性質(zhì):根據(jù)線程定義可知線程有以下性質(zhì):(1) 線程是進(jìn)程內(nèi)的一個(gè)相對(duì)獨(dú)立的可執(zhí)行單元。(2) 線程是操作系統(tǒng)中的基本調(diào)度單元,因此線程中應(yīng)包含有調(diào)度所需的必要信息。線程與多線
6、程線程與多線程(3) 由于線程是被調(diào)度的基本單元,而進(jìn)程不是調(diào)度的單元。所以每個(gè)進(jìn)程在創(chuàng)建時(shí),至少需要同時(shí)為該進(jìn)程創(chuàng)建一個(gè)線程。也就是說(shuō)進(jìn)程中至少要有一個(gè)或一個(gè)以上線程,否則該進(jìn)程無(wú)法被調(diào)度執(zhí)行。(4) 需要時(shí),線程可以創(chuàng)建其他線程。(5) 進(jìn)程是被分給并擁有資源的基本單元,同一進(jìn)程內(nèi)的多個(gè)線程共享該進(jìn)程的資源。但線程并不擁有資源,只是使用它們。線程與多線程線程與多線程(6) 由于共享資源(包括數(shù)據(jù)和文件),所以線程間需要通信和同步機(jī)制。(7) 線程有生命期,有誕生和死亡。在生命期中有狀態(tài)的變化。線程與多線程線程與多線程使用多進(jìn)程和多線程的優(yōu)點(diǎn)使用多進(jìn)程和多線程的優(yōu)點(diǎn)多進(jìn)程的優(yōu)點(diǎn):多進(jìn)程的優(yōu)點(diǎn)
7、:在同一個(gè)時(shí)間里,同一個(gè)計(jì)算機(jī)系統(tǒng)中如果允許兩個(gè)或兩個(gè)以上的進(jìn)程處于運(yùn)行狀態(tài),這便是多任務(wù)?,F(xiàn)代的操作系統(tǒng)幾乎都是多任務(wù)操作系統(tǒng),能夠同時(shí)管理多個(gè)進(jìn)程的運(yùn)行。多任務(wù)帶來(lái)的好處是明顯的,比如你可以邊聽(tīng)mp3邊上網(wǎng),與此同時(shí)甚至可以將下載的文檔打印出來(lái),而這些任務(wù)之間絲毫不會(huì)相互干擾。那么這里就涉及到并行的問(wèn)題,俗話(huà)說(shuō),一心不能二用,這對(duì)計(jì)算機(jī)也一樣,原則上一個(gè)CPU只能分配給一個(gè)進(jìn)程,以便運(yùn)行這個(gè)進(jìn)程。我們通常使用的計(jì)算機(jī)中只有一個(gè)CPU,也就是說(shuō)只有一顆心,要讓它一心多用,同時(shí)運(yùn)行多個(gè)進(jìn)程,就必須使用并發(fā)技術(shù)。實(shí)現(xiàn)并發(fā)技術(shù)相當(dāng)復(fù)雜,最容易理解的是“時(shí)間片輪轉(zhuǎn)進(jìn)程調(diào)度算法”,它的思想簡(jiǎn)單介紹如下
8、:在操作系統(tǒng)的管理下,所有正在運(yùn)行的進(jìn)程輪流使用CPU,每個(gè)進(jìn)程允許占用CPU的時(shí)間非常短(比如10毫秒),這樣用戶(hù)根本感覺(jué)不出來(lái)CPU是在輪流為多個(gè)進(jìn)程服務(wù),就好象所有的進(jìn)程都在不間斷地運(yùn)行一樣。但實(shí)際上在任何一個(gè)時(shí)間內(nèi)有且僅有一個(gè)進(jìn)程占有CPU。多線程的優(yōu)點(diǎn)多線程的優(yōu)點(diǎn):多線程程序作為一種多任務(wù)、并發(fā)的工作方式,當(dāng)然有以下的優(yōu)點(diǎn):1) 提高應(yīng)用程序響應(yīng)。這對(duì)圖形界面的程序尤其有意義,當(dāng)一個(gè)操作耗時(shí)很長(zhǎng)時(shí),整個(gè)系統(tǒng)都會(huì)等待這個(gè)操作,此時(shí)程序不會(huì)響應(yīng)鍵盤(pán)、鼠標(biāo)、菜單的操作,而使用多線程技術(shù),將耗時(shí)長(zhǎng)的操作(time consuming)置于一個(gè)新的線程,可以避免這種尷尬的情況。2) 使多CPU
9、系統(tǒng)更加有效。操作系統(tǒng)會(huì)保證當(dāng)線程數(shù)不大于CPU數(shù)目時(shí),不同的線程運(yùn)行于不同的CPU上。3) 改善程序結(jié)構(gòu)。一個(gè)既長(zhǎng)又復(fù)雜的進(jìn)程可以考慮分為多個(gè)線程,成為幾個(gè)獨(dú)立或半獨(dú)立的運(yùn)行部分,這樣的程序會(huì)利于理解和修改。 使用多進(jìn)程和多線程的優(yōu)點(diǎn)使用多進(jìn)程和多線程的優(yōu)點(diǎn)Java中的中的多線程多線程n多線程Java語(yǔ)言中有一個(gè)重要的特性是支持多線程,在Java中,一個(gè)應(yīng)用程序可以包含多個(gè)線程。每個(gè)線程執(zhí)行特定的任務(wù),并可與其他線程并發(fā)執(zhí)行 多線程使系統(tǒng)的空轉(zhuǎn)時(shí)間最少,提高CPU利用率多線程編程環(huán)境用方便的模型隱藏CPU在任務(wù)間切換的事實(shí) 主線程主線程 n在Java程序啟動(dòng)時(shí),一個(gè)線程立刻運(yùn)行,該線程通常稱(chēng)
10、為程序的主線程。n主線程的重要性體現(xiàn)在兩個(gè)方面: 它是產(chǎn)生其他子線程的線程。通常它必須最后完成執(zhí)行,因?yàn)樗鼒?zhí)行各種關(guān)閉動(dòng)作。主線程示例主線程示例class Mythread public static void main(String args) Thread t= Thread.currentThread(); System.out.println(當(dāng)前線程是: +t); t.setName(MyJavaThread); System.out.println(當(dāng)前線程名是: +t); try for(int i=0;i=0; i-)System.out.print(r+i);try Thre
11、ad.sleep(1000);/當(dāng)前線程休眠1秒 catch (InterruptedException e) e.printStackTrace();n示例二簡(jiǎn)單舉例說(shuō)明使用線程調(diào)用方法與直接調(diào)用方法完成某個(gè)任務(wù)的區(qū)別:(一)直接調(diào)用方法(一)直接調(diào)用方法class TestThreadpublic static void main(String args)new TestThread().test();/查看結(jié)果public void test()MyThread t = new MyThread();t.run();while(true)System.out.println(test.)
12、;try Thread.sleep(1000);/當(dāng)前線程休眠1秒 catch ( 線程使用實(shí)例線程使用實(shí)例class MyThread public void run()int num = 0;while(true)System.out.println(MyThread.);try Thread.sleep(1000);/當(dāng)前線程休眠1秒 catch (InterruptedException e) e.printStackTrace();if(num+ = 10) break;線程使用實(shí)例線程使用實(shí)例(二)使用線程使用線程class TestThreadpublic static void
13、 main(String args)new TestThread().test();/查看結(jié)果public void test()MyThread t = new MyThread();t.start();/啟動(dòng)線程while(true)System.out.println(test.);try Thread.sleep(1000); catch (InterruptedException e) e.printStackTrace();線程使用實(shí)例線程使用實(shí)例class MyThread extends Threadpublic void run()int num = 0;while(true
14、)System.out.println(MyThread.);try Thread.sleep(1000); catch (InterruptedException e) e.printStackTrace();if(num+ = 10)break;線程使用實(shí)例線程使用實(shí)例Daemon線程線程一個(gè)daemon線程是在后臺(tái)執(zhí)行服務(wù)的線程,例如網(wǎng)絡(luò)服務(wù)器偵聽(tīng)連接端口的服務(wù)線程,垃圾收集線程或其他jvm建立的線程。Daemon線程會(huì)隨著產(chǎn)生他的線程的結(jié)束而結(jié)束。使用setDaemon(boolean on)方法設(shè)置一個(gè)線程是否為Daemon線程。線程狀態(tài)線程狀態(tài)n新建 : 新建的線程處于新建狀態(tài)。n
15、就緒 : 在創(chuàng)建線程后,調(diào)用start() 方法, 它將處于就緒狀態(tài)。n運(yùn)行 :處于就緒狀態(tài)的線程被調(diào)度后開(kāi)始 執(zhí)行時(shí)進(jìn)入運(yùn)行狀態(tài)。n睡眠 : 線程的執(zhí)行可通過(guò)使用 sleep() 方 法來(lái)暫時(shí)中止。在睡眠后,線程將 進(jìn)入就緒狀態(tài)。n等待 : 如果調(diào)用了 wait() 方法,線程將處于等待 狀態(tài)。用于在兩個(gè)或多個(gè)線程并發(fā)運(yùn)行時(shí)。n掛起 : 在臨時(shí)停止或中斷線程的執(zhí)行時(shí),線程就 處于掛起狀態(tài)。n恢復(fù) : 在掛起的線程被恢復(fù)執(zhí)行時(shí),可以說(shuō)它已 被恢復(fù)。n阻塞 :在線程等待一個(gè)事件時(shí)(例如輸入/輸出操 作),就稱(chēng)其處于阻塞狀態(tài)。n死亡 :在 run() 方法已完成執(zhí)行或其 stop() 方法 被調(diào)用
16、之后,線程就處于死亡狀態(tài)。 線程狀態(tài)線程狀態(tài)掛起掛起 新線程新線程就緒就緒運(yùn)行運(yùn)行死亡死亡睡眠睡眠等待等待阻塞阻塞調(diào)用wait()調(diào)用notify()或notifyAll()調(diào)用start()被調(diào)度run()執(zhí)行結(jié)束調(diào)用sleep()睡眠時(shí)間到了suspend()該方法已過(guò)時(shí),可以參考APII/O資源等待獲得I/O資源線程狀態(tài)轉(zhuǎn)換圖線程狀態(tài)轉(zhuǎn)換圖常用常用API說(shuō)明說(shuō)明npublic static void sleep(long millis);當(dāng)前進(jìn)入休眠不管有沒(méi)有其它線程就緒,都會(huì)暫停。而且同時(shí)也給更低優(yōu)先級(jí)線程運(yùn)行的機(jī)會(huì)。休眠會(huì)在指定時(shí)間后讓自己轉(zhuǎn)換為就緒狀態(tài)。n但不表示指定時(shí)間后會(huì)立即運(yùn)
17、行。npublic static void yield();當(dāng)前線程主動(dòng)讓出執(zhí)行權(quán)讓其他線程有被執(zhí)行的機(jī)會(huì),當(dāng)線程執(zhí)行yield()方法讓出執(zhí)行權(quán)時(shí),它會(huì)再度處于Runnable狀態(tài),等待調(diào)度。nsleep與yield區(qū)別:sleep是當(dāng)前線程暫停執(zhí)行進(jìn)入Blocked狀態(tài)。yield是讓出執(zhí)行權(quán)進(jìn)入就緒狀態(tài),等待下一次調(diào)度。npublic final void join() ;當(dāng)線程使用join加入另一個(gè)線程時(shí),另一個(gè)線程會(huì)等待這個(gè)加入的線程執(zhí)行完畢,才繼續(xù)執(zhí)行。常用常用API說(shuō)明說(shuō)明如何停止線程如何停止線程nStop()方法已被標(biāo)識(shí)為deprecated,如果想停止一個(gè)線程必須自行設(shè)計(jì)。可以參考如下代碼:class TestThread2public static void main(String args)MyThread t = new MyThread();t.start();try Thread.sleep(1000); catch (Interrup
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度不動(dòng)產(chǎn)投資信托合同協(xié)議
- 2025年度夫妻財(cái)產(chǎn)約定與家庭財(cái)務(wù)規(guī)劃協(xié)議書(shū)模板
- 2025年度公廁保潔與智能設(shè)備維護(hù)服務(wù)合同
- 2025年度房屋遺產(chǎn)繼承與遺產(chǎn)分配及稅務(wù)籌劃協(xié)議
- 2025年度單價(jià)合同在新能源技術(shù)研發(fā)中的合同履行與經(jīng)濟(jì)效益
- 2025年度定向委培協(xié)議書(shū):新材料研發(fā)人才定向培養(yǎng)協(xié)議
- 2025年度農(nóng)村自來(lái)水用戶(hù)用水糾紛處理合同
- 2025年度建筑材料經(jīng)銷(xiāo)商返點(diǎn)獎(jiǎng)勵(lì)協(xié)議
- 2025年度勞動(dòng)合同協(xié)商解除協(xié)議書(shū)-企業(yè)轉(zhuǎn)制員工安置協(xié)議
- 4S店裝飾維修服務(wù)合同
- 鋼網(wǎng)驗(yàn)收?qǐng)?bào)告
- 防水補(bǔ)漏工程合同(合同版本)
- 鐵路局中間站管理手冊(cè)
- 監(jiān)理日志表(標(biāo)準(zhǔn)模版)
- H3C-CAS虛擬化平臺(tái)詳細(xì)介紹
- 小學(xué)生韻母in、ing常見(jiàn)漢字與區(qū)分練習(xí)
- 藥房品種類(lèi)別及數(shù)量清單
- 大學(xué)生安全教育課件(ppt共41張)
- 初中物理人教版八年級(jí)下冊(cè) 第1節(jié)牛頓第一定律 課件
- 網(wǎng)站培訓(xùn)內(nèi)容trswcm65表單選件用戶(hù)手冊(cè)
- 連續(xù)平壓熱壓機(jī) 三篇 俞敏等
評(píng)論
0/150
提交評(píng)論