資源描述:
《java多線程編程總結.pdf》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、Java多線程編程線程:大總結Java線程是Java語言中一個非常重要的部分,Java5之前,多線程的語言支持還是比較弱的,內容也較少,寫一個復雜的多線程程序是相當有挑戰(zhàn)性的。在Java5以后,Java對多線程做了很多擴展,擴展部分稱之為并發(fā)包。這部分內容大大增強了Java多線程編程的能力,通過使用Java5線程新特征的API,可以很容易的做出復雜的多線程程序。與其他語言相比,已經(jīng)是相當強悍了。通過十多篇博文,將Java多線程的方方面面過了一遍,對我來說是一個學習和提高的過程,也為Java線程系列博文能給
2、后來的學習者帶來便利。知識點都過了一遍,要總結起來感覺很困難,畢竟Java線程是一個龐大的話題,不知道從何說起,如果泛泛而談,那總結還有什么意義呢,再次,將前面的博文串聯(lián)起來,按照先后順序加上鏈接,以方便瀏覽也最好的首尾。下面是Java線程系列博文的一個編目:Java線程:概念與原理Java線程:創(chuàng)建與啟動Java線程:線程棧模型與線程的變量Java線程:線程狀態(tài)的轉換Java線程:線程的同步與鎖Java線程:線程的交互Java線程:線程的調度-休眠Java線程:線程的調度-優(yōu)先級Java線程:線程的調度
3、-讓步Java線程:線程的調度-合并Java線程:線程的調度-守護線程Java線程:線程的同步-同步方法Java線程:線程的同步-同步塊Java線程:并發(fā)協(xié)作-生產(chǎn)者消費者模型Java線程:并發(fā)協(xié)作-死鎖Java線程:volatile關鍵字Java線程:新特征-線程池Java線程:新特征-有返回值的線程Java線程:新特征-鎖(上)Java線程:新特征-鎖(下)Java線程:新特征-信號量Java線程:新特征-阻塞隊列Java線程:新特征-阻塞棧Java線程:新特征-條件變量Java線程:新特征-原子量J
4、ava線程:新特征-障礙器Java線程:大總結Java線程:概念與原理一、操作系統(tǒng)中線程和進程的概念現(xiàn)在的操作系統(tǒng)是多任務操作系統(tǒng)。多線程是實現(xiàn)多任務的一種方式。進程是指一個內存中運行的應用程序,每個進程都有自己獨立的一塊內存空間,一個進程中可以啟動多個線程。比如在Windows系統(tǒng)中,一個運行的exe就是一個進程。線程是指進程中的一個執(zhí)行流程,一個進程中可以運行多個線程。比如java.exe進程中可以運行很多線程。線程總是屬于某個進程,進程中的多個線程共享進程的內存?!巴瑫r”執(zhí)行是人的感覺,在線程之間實
5、際上輪換執(zhí)行。二、Java中的線程在Java中,“線程”指兩件不同的事情:1、java.lang.Thread類的一個實例;2、線程的執(zhí)行。使用java.lang.Thread類或者java.lang.Runnable接口編寫代碼來定義、實例化和啟動新線程。一個Thread類實例只是一個對象,像Java中的任何其他對象一樣,具有變量和方法,生死于堆上。Java中,每個線程都有一個調用棧,即使不在程序中創(chuàng)建任何新的線程,線程也在后臺運行著。一個Java應用總是從main()方法開始運行,mian()方法運行
6、在一個線程內,它被稱為主線程。一旦創(chuàng)建一個新的線程,就產(chǎn)生一個新的調用棧。線程總體分兩類:用戶線程和守候線程。當所有用戶線程執(zhí)行完畢的時候,JVM自動關閉。但是守候線程卻不獨立于JVM,守候線程一般是由操作系統(tǒng)或者用戶自己創(chuàng)建的。Java線程:創(chuàng)建與啟動一、定義線程1、擴展java.lang.Thread類。此類中有個run()方法,應該注意其用法:publicvoidrun()如果該線程是使用獨立的Runnable運行對象構造的,則調用該Runnable對象的run方法;否則,該方法不執(zhí)行任何操作并返回
7、。Thread的子類應該重寫該方法。2、實現(xiàn)java.lang.Runnable接口。voidrun()使用實現(xiàn)接口Runnable的對象創(chuàng)建一個線程時,啟動該線程將導致在獨立執(zhí)行的線程中調用對象的run方法。方法run的常規(guī)協(xié)定是,它可能執(zhí)行任何所需的操作。二、實例化線程1、如果是擴展java.lang.Thread類的線程,則直接new即可。2、如果是實現(xiàn)了java.lang.Runnable接口的類,則用Thread的構造方法:Thread(Runnabletarget)Thread(Runnabl
8、etarget,Stringname)Thread(ThreadGroupgroup,Runnabletarget)Thread(ThreadGroupgroup,Runnabletarget,Stringname)Thread(ThreadGroupgroup,Runnabletarget,Stringname,longstackSize)三、啟動線程在線程的Thread對象上調用start()方法,而不是run()或者別的