學過Java的人都知道,Java是少數的集中支援多執行緒的語言之一,大多數的語言智慧運行單獨的一個程式區塊,無法同時執行不同的多個程式區塊,Java的多執行緒機制彌補了這個缺憾,他可以讓不同的程式區塊一起運行,這樣可以讓程式運作更加順暢,同時也達到了多工處理的目的:
一、執行緒與行程的概念
現在的作業系統是多任務作業系統。多執行緒是實現多任務的一種方式。
進程是程式的一個動態執行過程,是指一個記憶體中運行的應用程序,每個進程都有自己獨立的一塊記憶體空間,一個進程中可以啟動多個線程。例如在Windows系統中,一個運行的exe就是一個進程。執行緒是指進程中的一個執行流程,一個行程中可以運行多個執行緒。例如java.exe進程中可以運行很多執行緒。執行緒總是屬於某個進程,進程中的多個執行緒共享進程的記憶體。 「同時」執行是人的感覺,在執行緒之間實際上輪換執行。
二、Java中執行緒的實作
在Java中藥想實作多執行緒有兩種手段,一種是整合Thread類,另一種就是實作Runnable接口。下面看繼承自Thread類別執行緒的建立原理:
先定義一個執行緒類別該類別必須繼承自Thread類,同時必須明確的覆蓋run()方法
如:
class MyThread extends Thread{ public void run(){ //覆写Thread类中的run方法此方法是线程中 线程主体; 的主体 }
接著定義一個主類,實例化執行緒類別的對象,發動啟動執行緒的指令
#如:
public class ThreadText{ public stataic void main(String args[]){ MyThread m1=new MyThread();//实例化对象 m1.start();//启动多线程 } };
實作Runnable介面:
# 先定義一個執行緒類別繼承自Runnable介面
如:
class MyThread implements Runnable{ public void run(){ //覆写Runnable接口中的run方法 线程主体; }
然後定義一個主類,實例化執行緒類別的對象,發動啟動執行緒的指令
如:
public class ThreadText{ public stataic void main(String args[]){ MyThread m1=new MyThread();//实例化Runnable子类对象 Thread t1=new Thread(m1);//实例化Thread类对象 t1.start();//启动多线程 } };
三、執行緒的幾個狀態
在Java當中,執行緒通常都有五種狀態,建立、就緒、運作、阻塞和死亡。
第一是建立狀態。在產生線程對象,並沒有呼叫該對象的start方法,這是線程處於創建狀態。
第二是就緒狀態。當呼叫了線程物件的start方法之後,該線程就進入了就緒狀態,但是此時線程調度程序還沒有把該線程設定為當前線程,此時處於就緒狀態。在執行緒運行之後,從等待或睡眠回來之後,也會處於就緒狀態。
第三是運行狀態。線程調度程序將處於就緒狀態的線程設定為當前線程,此時線程就進入了運行狀態,開始運行run函數當中的程式碼。
第四是阻塞狀態。執行緒正在運作的時候,被暫停,通常是為了等待某個時間的發生(比如說某項資源就緒)之後再繼續運作。 sleep,suspend,wait等方法都可以導致執行緒阻塞。
第五是死亡狀態。如果一個執行緒的run方法執行結束或呼叫stop方法後,該執行緒就會死亡。對於已經死亡的線程,無法再使用start方法令其進入就緒。
以上是解析Java中多執行緒原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!