版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
項目10圖片幻燈片播放器本章目標(biāo)了解多線程的概念掌握線程的創(chuàng)建和啟動掌握線程的生命周期本章任務(wù)制作圖片幻燈片播放器,如下圖所示
1.多線程概念-進程進程:程序運行的基本單元,是指運行中的應(yīng)用程序,每一個進程都有自己獨立的內(nèi)存空間。對一個應(yīng)用程序可以同時啟動多個進程。
例如每次執(zhí)行JDK的java.exe程序,就啟動了一個獨立的Java虛擬機進程,該進程的任務(wù)是解析并執(zhí)行Java程序代碼。1.多線程概念-線程線程是指進程中的一個執(zhí)行流程,有時也稱為執(zhí)行情景。一個進程可以由多個線程組成,即在一個進程中可以同時運行多個不同的線程,它們分別執(zhí)行不同的任務(wù)。當(dāng)進程內(nèi)的多個線程同時運行,這種運行方式稱為并發(fā)運行。圖
多線程執(zhí)行方式
線程和進程的主要差別:一個程序至少有一個進程,一個進程至少有一個線程.線程的劃分尺度小于進程,使得多線程程序的并發(fā)性高。每個進程都有一段專用的內(nèi)存區(qū)域。與此相反,線程卻共享內(nèi)存單元(包括代碼和數(shù)據(jù)),通過共享的內(nèi)存單元來實現(xiàn)數(shù)據(jù)交換、實時通信與必要的同步操作。
1.多線程概念-線程和進程區(qū)別主線程每當(dāng)用java命令啟動一個Java虛擬機進程,Java虛擬機就會創(chuàng)建一個主線程,該線程從程序入口main()方法開始執(zhí)行。
publicclassSample{publicvoidmethod1(){System.out.println(“hellojava”);}publicvoidmethod2(){method1();}publicstaticvoidmain(Stringargs[]){Samples=newSample();s.method2();}}main()方法method2()方法method1()方法主線程的方法調(diào)用棧2.線程的創(chuàng)建和啟動線程創(chuàng)建2種方法:繼承Thread類,定義一個Thread類的子類,覆蓋Thread類的run()方法,然后創(chuàng)建該子類的實例。實現(xiàn)Runnable接口來創(chuàng)建線程。定義一個實現(xiàn)Runnable接口的類,實現(xiàn)它的run()方法,然后將這個類的實例作為Thread的構(gòu)造方法的參數(shù),創(chuàng)建Thread類的實例。其中,Thread類和Runnable接口都定義在包java.lang中。2.線程的創(chuàng)建和啟動調(diào)用start()方法啟動線程。比如,MyThreadt=newMyThread(); t.start();
1).繼承Thread類以創(chuàng)建線程class類名稱extendsThread //繼承自Thread類{
成員變量;
成員方法;
publicvoidrun()//重寫run方法
{//線程處理的代碼
}}
創(chuàng)建Thread類的子類classMyThreadextendsThread{
public
voidrun(){
for(inti=1;i<=10;i++)System.out.println(this.getName()+":"+i);}}public
classThreadDemo1{
public
static
voidmain(String[]args){MyThreadt=newMyThread();
t.start();
}}Thread類的常用方法currentThread()返回當(dāng)前運行的Thread對象。start()啟動一個線程。run()線程體,由start()方法調(diào)用,當(dāng)run()方法返回時,當(dāng)前的線程結(jié)束。stop()使調(diào)用它的線程立即停止執(zhí)行。sleep(intn)使線程睡眠n毫秒,n毫秒后,線程可以再次運行。suspend()使線程掛起,暫停運行。resume()恢復(fù)掛起的線程,使其處于可運行狀態(tài)(Runnable)。yield()將CPU控制權(quán)主動移交到下一個可運行線程。setPriority()設(shè)置線程優(yōu)先級。getPriority()返回線程優(yōu)先級。setName()設(shè)置線程的名字。getName()返回該線程的名字。isAlive()如果線程已被啟動并且未被終止,那么isAlive()返回true。如果返回false,則該線程是新創(chuàng)建或是已被終止的。
1)線程的睡眠(sleep)線程的睡眠是指運行中的線程暫時放棄CPU,轉(zhuǎn)到阻塞狀態(tài)。通過調(diào)用Thread類的sleep()方法線程在睡眠時若被中斷將會拋出一個InterruptedException異常
2)線程的讓步(yield)功能與sleep()方法相似兩者的區(qū)別如下:sleep()是將CPU出讓給其他任何線程,而yield()方法只會給優(yōu)先級更高或同優(yōu)先級的線程運行的機會。sleep()方法使當(dāng)前運行的線程轉(zhuǎn)到阻塞狀態(tài),在指定的時間內(nèi)肯定不會執(zhí)行;而yield()方法將使運行的線程進入就緒狀態(tài),所以執(zhí)行yield()的線程有可能在進入到就緒狀態(tài)后馬上又被執(zhí)行。
3)線程的掛起與恢復(fù)(suspend與resume)通過調(diào)用Thread類提供的suspend()方法可暫停正在運行的線程,使其進入阻塞狀態(tài);可通過resume()方法恢復(fù)。主線程和多個線程 packagech11;classMyThread2extends
Thread{MyThread2(Stringstr){super(str);}
publicvoidrun(){for(inti=1;i<=5;i++)System.out.println(this.getName()+":"+i);}}publicclassThreadDemo2{publicstaticvoidmain(String[]args){MyThread2t1=newMyThread2("線程1");MyThread2t2=newMyThread2("線程2");t1.start();t2.start();for(inti=1;i<=5;i++)System.out.println(Thread.currentThread().getName()+":"+i);}}2).實現(xiàn)Runnable接口以創(chuàng)建線程classMyRunnableimplements
Runnable{
publicvoidrun()
{
//新建線程上執(zhí)行的代碼
}}實現(xiàn)Runnable接口classMyRunnerimplementsRunnable{publicvoidrun(){ Strings=Thread.currentThread().getName();for(inti=1;i<=10;i++)System.out.println(s+":"+i);}}publicclassRunnerDemo{publicstaticvoidmain(String[]args){MyRunnerr1=newMyRunner();Threadt1=newThread(r1,"線程1");Threadt2=newThread(r1,"線程2");t1.start();t2.start();for(inti=1;i<=10;i++)System.out.println("main主線程"+":"+i);}}不同方法創(chuàng)建線程的比較實現(xiàn)Runnable接口比繼承Thread類所具有的優(yōu)勢:1)適合多個相同的程序代碼的線程去處理同一個資源;2)可以避免java中的單繼承的限制;3)增加程序的健壯性,代碼可以被多個線程共享,代碼和數(shù)據(jù)獨立。如何實現(xiàn)字幕滾動?JFrame界面一個組件:JLabel利用多線程設(shè)置JLabel標(biāo)簽的值多線程實現(xiàn)字幕滾動
2.線程的優(yōu)先級線程調(diào)度器按照線程的優(yōu)先級決定調(diào)度哪些線程來執(zhí)行線程的調(diào)度是搶先式的在Java中,線程的優(yōu)先級是用整數(shù)表示的,取值范圍是1~10。低優(yōu)先級:Thread.MIN_PRIORITY,取值為1。缺省優(yōu)先級:Thread.NORM_PRIORITY,取值為5。
高優(yōu)先級:Thread.MAX_PRIORITY,取值為10。
3.線程的管理1).線程的狀態(tài)
線程在它的生命周期中一般具有五種狀態(tài),即新建、就緒、運行、堵塞和死亡。線程的狀態(tài)轉(zhuǎn)換圖如圖所示。圖
線程的狀態(tài)轉(zhuǎn)換線程的不同狀態(tài)1、新建狀態(tài)當(dāng)用new操作符創(chuàng)建一個新的線程對象時,該線程處于創(chuàng)建狀態(tài)。處于創(chuàng)建狀態(tài)的線程只是一個空的線程對象,系統(tǒng)不為它分配資源。2、就緒狀態(tài)處于就緒狀態(tài)的線程已經(jīng)具備了運行條件,但還沒有分配到CPU,處于線程就緒隊列,等待系統(tǒng)為其分配CPU。3、運行狀態(tài)處于運行狀態(tài)的線程最為復(fù)雜,它可以變?yōu)樽枞麪顟B(tài)、就緒狀態(tài)和死亡狀態(tài)。處于就緒狀態(tài)的線程,如果獲得了cpu的調(diào)度,就會從就緒狀態(tài)變?yōu)檫\行狀態(tài),執(zhí)行run()方法中的任務(wù)。如果該線程失去了cpu資源,就會又從運行狀態(tài)變?yōu)榫途w狀態(tài)。重新等待系統(tǒng)分配資源。也可以對在運行狀態(tài)的線程調(diào)用yield()方法,它就會讓出cpu資源,再次變?yōu)榫途w狀態(tài)。線程的不同狀態(tài)4、阻塞狀態(tài)處于運行狀態(tài)的線程在某些情況下,如執(zhí)行了sleep(睡眠)方法,或等待I/O設(shè)備等資源,將讓出CPU并暫時停止自己的運行,進入阻塞狀態(tài)。在阻塞狀態(tài)的線程不能進入就緒隊列。只有當(dāng)引起阻塞的原因消除時,如睡眠時間已到,或等待的I/O設(shè)備空閑下來,線程便轉(zhuǎn)入就緒狀態(tài),重新到就緒隊列中排隊等待,被系統(tǒng)選中后從原來
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年賽罕區(qū)第三幼兒園招聘備考題庫有答案詳解
- 吉林大學(xué)附屬中學(xué)2026年公開招聘教師備考題庫及一套參考答案詳解
- 公共交通服務(wù)質(zhì)量評估制度
- 2026年銀聯(lián)國際有限公司招聘備考題庫及參考答案詳解
- 2026年砂子塘街道社區(qū)衛(wèi)生服務(wù)中心公開招聘備考題庫及答案詳解一套
- 中學(xué)學(xué)生社團活動經(jīng)費管理制度
- 中學(xué)教學(xué)質(zhì)量監(jiān)控制度
- 2026年未央?yún)^(qū)大明宮社區(qū)衛(wèi)生服務(wù)中心招聘備考題庫完整參考答案詳解
- 2026年浙商中拓集團股份有限公司社會招聘備考題庫附答案詳解
- 交通設(shè)施報廢更新制度
- 游樂場情管理制度規(guī)范
- 中央2025年全國婦聯(lián)所屬在京事業(yè)單位招聘93人筆試歷年典型考點題庫附帶答案詳解
- 2026夢工場招商銀行太原分行寒假實習(xí)生招聘考試題庫附答案解析
- 2026年仟益水務(wù)(重慶)有限公司招聘備考題庫及一套答案詳解
- 鋼結(jié)構(gòu)廠房施工樣板引路方案
- 2026年華為射頻芯片設(shè)計工程師高頻常見面試題包含詳細解答+避坑指南
- 2025浙江杭州錢塘新區(qū)建設(shè)投資集團有限公司招聘5人參考筆試題庫及答案解析
- 三年(2023-2025)中考英語真題分類匯編(全國)專題41 讀寫綜合(解析版)
- 編程基礎(chǔ)教案
- 2025年《思想道德與法治》期末考試題庫(濃縮500題)
- 阿司匹林在心血管疾病級預(yù)防中的應(yīng)用
評論
0/150
提交評論