資源描述:
《《java程序設(shè)計》輔導(dǎo)資料12》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、Java程序設(shè)計輔導(dǎo)資料十二主題:第七章多線程的概念、進(jìn)程和線程(課件)學(xué)習(xí)時間:2014年12月15日一12月21曰內(nèi)容:我們這周主要學(xué)習(xí)《Java程序設(shè)計》這門課程的第7章關(guān)于Java多線程以及進(jìn)程和線程的相關(guān)內(nèi)容。希望通過下面的內(nèi)容能使同學(xué)們對Java多線程方面的知識有進(jìn)一步的了解。知識要點:1、Java線程的概念2、Java線程的原理3、Java線程的創(chuàng)建與使用4、多線程的概念5、線程狀態(tài)的轉(zhuǎn)換6、線程同步7、鎖重點與難點:重點:多線程難點:線程同步、鎖的使用一、Java線程的概念和原理1、橾作系統(tǒng)
2、中線程和進(jìn)程的概念現(xiàn)在的橾作系統(tǒng)是多任務(wù)橾作系統(tǒng)。多線程是實現(xiàn)多任務(wù)的一種方式。進(jìn)程是指一個內(nèi)存中運行的應(yīng)用程序,每個進(jìn)程都有自己獨立的一塊內(nèi)存空間,一個進(jìn)程中可以啟動多個線程。比如在Windows系統(tǒng)中,一個運行的exe就是一個進(jìn)程。線程是指進(jìn)程中的一個執(zhí)行流程,一個進(jìn)程中可以運行多個線程。比如java,exe進(jìn)程中可以運行很多線程。線程總是屬于某個進(jìn)程,進(jìn)程中的多個線程共享進(jìn)程的內(nèi)存?!巴瑫r”執(zhí)行是人的感覺,在線程之間實際上輪換執(zhí)行。2、Java中的線程在Java中,“線程”指兩件不同的事情:java.
3、Iang.Thread類的一個實例;線程的執(zhí)行。使用java.Iang.Thread類或者java.Iang.RunnabIe接口編寫代碼來定義、實例化和啟動新線程。一個Thread類實例只是一個對象,像Java中的任何其他對象一樣,具有變量和方法,生死于堆上。Java中,每個線程都有一個調(diào)用棧,即使不在程序中創(chuàng)建任何新的線程,線程也在后臺運行著。一個Java應(yīng)用總是從main()方法開始運行,mian()方法運行在一^個線程內(nèi),它被稱為主線程。一旦創(chuàng)建一個新的線程,就產(chǎn)生一個新的調(diào)用棧。線程總體分兩類:用
4、戶線程和守候線程。當(dāng)所有用戶線程執(zhí)行完畢的時候,JVM自動關(guān)閉。但是守候線程卻不獨立于JVM,守候線程一般是由橾作系統(tǒng)或者用戶自己剖建的。二、Java線程的創(chuàng)建與啟動1、定義線程擴展java.Iang.Thread類。此類中有個run()方法,應(yīng)該注意其用法:publicvoidrun()如果該線程是使用獨立的Runnable運行對象構(gòu)造的,則調(diào)用該Runnable對象的run方法;否則,該方法不執(zhí)行任何操作并返回。Thread的子類應(yīng)該重寫該方法。實現(xiàn)java.Iang.Runnable接口。voidru
5、n()使用實現(xiàn)接口Runnable的對象創(chuàng)建一個線程時,啟動該線程將導(dǎo)致在獨立執(zhí)行的線程中調(diào)用對象的run方法。方法run的常規(guī)協(xié)定是,它可能執(zhí)行任何所需的操作。2、實例化線程如果是擴展java.lang.Thread類的線程,則直接new即可。如果是實現(xiàn)了java.Iang.Runnable接口的類,則用Thread的構(gòu)造方法:Thread(RunnabIetarget)Thread(RunnabIetarget,Stringname)Thread(ThreadGroupgroup,RunnabIetar
6、get)Thread(ThreadGroupgroup,RunnabIetarget,Stringname)Thread(ThreadGroupgroup,RunnabIetarget,Stringname,longstacksize)3、啟動線程在線程的Thread對象上調(diào)用start()方法,而不是run()或者別的方法。在調(diào)用startO方法之前:線程處于新狀態(tài)中,新狀態(tài)指有一個Thread對象,但還沒有一個真正的線程。在調(diào)用startO方法之后:發(fā)生了一系列復(fù)雜的事情啟動新的執(zhí)行線程(具有新的調(diào)用棧
7、);該線程從新狀態(tài)轉(zhuǎn)移到可運行狀態(tài);當(dāng)該線程獲得機會執(zhí)行時,其目標(biāo)runO方法將運行。注意:對Java來說,run()方法沒有任何特別之處。像main()方法一樣,它只是新線程知道調(diào)用的方法名稱(和簽名)。因此,在RunnabIe上或者Thread上調(diào)用run方法是合法的。但并不啟動新的線程。例子實現(xiàn)RunnabIe接口的多線程例子/***實現(xiàn)RunnabIe接口的類木*/publicclassDoSomethingimplementsRunnable{privateStringname;publicDoS
8、omething(Stringname){this.name=name;)publicvoidrun(){for(inti=0;i〈5;i++){for(longk=0;k<100000000;k++)System,out.printIn(name+":"+i);}}*測試Runnable類實現(xiàn)的多線程程序氺*/publicclassTestRunnabIe{publicstaticvoidmain(String