Java中多線程原理詳解
一、線程和進(jìn)程的概念
現(xiàn)在的操作系統(tǒng)是多任務(wù)操作系統(tǒng)。多線程是實(shí)現(xiàn)多任務(wù)的一種方式。
進(jìn)程是程序的一個(gè)動(dòng)態(tài)執(zhí)行過程,是指一個(gè)內(nèi)存中運(yùn)行的應(yīng)用程序,每個(gè)進(jìn)程都有自己獨(dú)立的一塊內(nèi)存空間,一個(gè)進(jìn)程中可以啟動(dòng)多個(gè)線程。比如在Windows系統(tǒng)中,一個(gè)運(yùn)行的exe就是一個(gè)進(jìn)程。線程是指進(jìn)程中的一個(gè)執(zhí)行流程,一個(gè)進(jìn)程中可以運(yùn)行多個(gè)線程。比如java.exe進(jìn)程中可以運(yùn)行很多線程。線程總是屬于某個(gè)進(jìn)程,進(jìn)程中的多個(gè)線程共享進(jìn)程的內(nèi)存?!巴瑫r(shí)”執(zhí)行是人的感覺,在線程之間實(shí)際上輪換執(zhí)行。
二、Java中線程的實(shí)現(xiàn)
在Java中藥想實(shí)現(xiàn)多線程有兩種手段,一種是集成Thread類,另一種就是實(shí)現(xiàn)Runnable接口。下面看繼承自Thread類線程的創(chuàng)建原理:
首先定義一個(gè)線程類 該類必須繼承自Thread類,同時(shí)必須明確的覆寫run()方法
如:
class MyThread extends Thread{public void run(){ //覆寫Thread類中的run方法此方法是線程中線程主體; 的主體}
然后定義一個(gè)主類,實(shí)例化線程類的對象,發(fā)動(dòng)啟動(dòng)線程的命令
如:
public class ThreadText{public stataic void main(String args[]){MyThread m1=new MyThread();//實(shí)例化對象m1.start();//啟動(dòng)多線程}};
實(shí)現(xiàn)Runnable接口:
首先定義一個(gè)線程類繼承自Runnable接口
如:
class MyThread implements Runnable{public void run(){ //覆寫Runnable接口中的run方法線程主體;}
然后定義一個(gè)主類,實(shí)例化線程類的對象,發(fā)動(dòng)啟動(dòng)線程的命令
如:
public class ThreadText{public stataic void main(String args[]){MyThread m1=new MyThread();//實(shí)例化Runnable子類對象Thread t1=new Thread(m1);//實(shí)例化Thread類對象t1.start();//啟動(dòng)多線程}};
三、線程的幾種狀態(tài)
在Java當(dāng)中,線程通常都有五種狀態(tài),創(chuàng)建、就緒、運(yùn)行、阻塞和死亡。
第一是創(chuàng)建狀態(tài)。在生成線程對象,并沒有調(diào)用該對象的start方法,這是線程處于創(chuàng)建狀態(tài)。
第二是就緒狀態(tài)。當(dāng)調(diào)用了線程對象的start方法之后,該線程就進(jìn)入了就緒狀態(tài),但是此時(shí)線程調(diào)度程序還沒有把該線程設(shè)置為當(dāng)前線程,此時(shí)處于就緒狀態(tài)。在線程運(yùn)行之后,從等待或者睡眠中回來之后,也會處于就緒狀態(tài)。
第三是運(yùn)行狀態(tài)。線程調(diào)度程序?qū)⑻幱诰途w狀態(tài)的線程設(shè)置為當(dāng)前線程,此時(shí)線程就進(jìn)入了運(yùn)行狀態(tài),開始運(yùn)行run函數(shù)當(dāng)中的代碼。
第四是阻塞狀態(tài)。線程正在運(yùn)行的時(shí)候,被暫停,通常是為了等待某個(gè)時(shí)間的發(fā)生(比如說某項(xiàng)資源就緒)之后再繼續(xù)運(yùn)行。sleep,suspend,wait等方法都可以導(dǎo)致線程阻塞。
第五是死亡狀態(tài)。如果一個(gè)線程的run方法執(zhí)行結(jié)束或者調(diào)用stop方法后,該線程就會死亡。對于已經(jīng)死亡的線程,無法再使用start方法令其進(jìn)入就緒。
相關(guān)文章:
1. 讓 Asp 與 XML 交互2. jsp實(shí)現(xiàn)簡單用戶7天內(nèi)免登錄3. ASP.NET MVC實(shí)現(xiàn)登錄后跳轉(zhuǎn)到原界面4. jsp+mysql實(shí)現(xiàn)網(wǎng)頁的分頁查詢5. 怎樣打開XML文件?xml文件如何打開?6. ASP基礎(chǔ)入門第二篇(ASP基礎(chǔ)知識)7. xml文件的結(jié)構(gòu)解讀第1/2頁8. CSS3實(shí)例分享之多重背景的實(shí)現(xiàn)(Multiple backgrounds)9. 父div高度不能自適應(yīng)子div高度的解決方案10. UTF8轉(zhuǎn)成GB2312亂碼問題解決方案
