首頁  >  文章  >  Java  >  解析Java中多執行緒原理

解析Java中多執行緒原理

怪我咯
怪我咯原創
2017-04-05 16:32:301324瀏覽

學過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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn